@lodestar/beacon-node 1.34.1 → 1.35.0-dev.09716b423a

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 (519) hide show
  1. package/lib/api/impl/beacon/blocks/index.js +71 -53
  2. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  3. package/lib/api/impl/beacon/pool/index.js +3 -3
  4. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  5. package/lib/api/impl/config/constants.d.ts +5 -0
  6. package/lib/api/impl/config/constants.js +6 -1
  7. package/lib/api/impl/config/constants.js.map +1 -1
  8. package/lib/api/impl/debug/index.js +20 -9
  9. package/lib/api/impl/debug/index.js.map +1 -1
  10. package/lib/api/impl/errors.js +2 -0
  11. package/lib/api/impl/errors.js.map +1 -1
  12. package/lib/api/impl/index.d.ts +3 -3
  13. package/lib/api/impl/index.js +3 -3
  14. package/lib/api/impl/index.js.map +1 -1
  15. package/lib/api/impl/lodestar/index.js +1 -1
  16. package/lib/api/impl/lodestar/index.js.map +1 -1
  17. package/lib/api/impl/validator/index.js +2 -1
  18. package/lib/api/impl/validator/index.js.map +1 -1
  19. package/lib/api/rest/activeSockets.js +3 -2
  20. package/lib/api/rest/activeSockets.js.map +1 -1
  21. package/lib/api/rest/base.d.ts +1 -1
  22. package/lib/api/rest/base.js +6 -2
  23. package/lib/api/rest/base.js.map +1 -1
  24. package/lib/api/rest/index.js +2 -0
  25. package/lib/api/rest/index.js.map +1 -1
  26. package/lib/api/rest/swaggerUI.js +4 -2
  27. package/lib/api/rest/swaggerUI.js.map +1 -1
  28. package/lib/bun-wrappers/prometheus-gc-stats.d.ts +2 -0
  29. package/lib/bun-wrappers/prometheus-gc-stats.js +8 -0
  30. package/lib/bun-wrappers/prometheus-gc-stats.js.map +1 -0
  31. package/lib/chain/ColumnReconstructionTracker.d.ts +32 -0
  32. package/lib/chain/ColumnReconstructionTracker.js +71 -0
  33. package/lib/chain/ColumnReconstructionTracker.js.map +1 -0
  34. package/lib/chain/GetBlobsTracker.d.ts +31 -0
  35. package/lib/chain/GetBlobsTracker.js +82 -0
  36. package/lib/chain/GetBlobsTracker.js.map +1 -0
  37. package/lib/chain/archiveStore/archiveStore.js +49 -38
  38. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  39. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js +3 -0
  40. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js.map +1 -1
  41. package/lib/chain/archiveStore/index.d.ts +1 -1
  42. package/lib/chain/archiveStore/index.js +1 -1
  43. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js +5 -0
  44. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js.map +1 -1
  45. package/lib/chain/archiveStore/utils/archiveBlocks.js +14 -7
  46. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  47. package/lib/chain/balancesCache.js +1 -3
  48. package/lib/chain/balancesCache.js.map +1 -1
  49. package/lib/chain/beaconProposerCache.js +1 -0
  50. package/lib/chain/beaconProposerCache.js.map +1 -1
  51. package/lib/chain/blocks/blockInput/blockInput.d.ts +19 -7
  52. package/lib/chain/blocks/blockInput/blockInput.js +132 -88
  53. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  54. package/lib/chain/blocks/blockInput/index.d.ts +1 -1
  55. package/lib/chain/blocks/blockInput/index.js +1 -1
  56. package/lib/chain/blocks/blockInput/types.d.ts +19 -10
  57. package/lib/chain/blocks/blockInput/types.js +1 -0
  58. package/lib/chain/blocks/blockInput/types.js.map +1 -1
  59. package/lib/chain/blocks/blockInput/utils.d.ts +0 -4
  60. package/lib/chain/blocks/blockInput/utils.js +6 -29
  61. package/lib/chain/blocks/blockInput/utils.js.map +1 -1
  62. package/lib/chain/blocks/importBlock.js +36 -32
  63. package/lib/chain/blocks/importBlock.js.map +1 -1
  64. package/lib/chain/blocks/index.d.ts +6 -5
  65. package/lib/chain/blocks/index.js +5 -4
  66. package/lib/chain/blocks/index.js.map +1 -1
  67. package/lib/chain/blocks/types.d.ts +3 -108
  68. package/lib/chain/blocks/types.js +0 -119
  69. package/lib/chain/blocks/types.js.map +1 -1
  70. package/lib/chain/blocks/utils/chainSegment.d.ts +2 -2
  71. package/lib/chain/blocks/utils/chainSegment.js +2 -2
  72. package/lib/chain/blocks/utils/chainSegment.js.map +1 -1
  73. package/lib/chain/blocks/verifyBlock.d.ts +3 -3
  74. package/lib/chain/blocks/verifyBlock.js +15 -14
  75. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  76. package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts +7 -22
  77. package/lib/chain/blocks/verifyBlocksDataAvailability.js +18 -110
  78. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  79. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +4 -3
  80. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +24 -22
  81. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  82. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts +4 -3
  83. package/lib/chain/blocks/verifyBlocksSanityChecks.js +2 -2
  84. package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
  85. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts +3 -2
  86. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js +2 -2
  87. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
  88. package/lib/chain/blocks/writeBlockInputToDb.d.ts +3 -3
  89. package/lib/chain/blocks/writeBlockInputToDb.js +61 -63
  90. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  91. package/lib/chain/bls/multithread/index.js +168 -163
  92. package/lib/chain/bls/multithread/index.js.map +1 -1
  93. package/lib/chain/bls/singleThread.js +1 -0
  94. package/lib/chain/bls/singleThread.js.map +1 -1
  95. package/lib/chain/chain.d.ts +13 -11
  96. package/lib/chain/chain.js +79 -20
  97. package/lib/chain/chain.js.map +1 -1
  98. package/lib/chain/emitter.d.ts +43 -2
  99. package/lib/chain/emitter.js +18 -0
  100. package/lib/chain/emitter.js.map +1 -1
  101. package/lib/chain/errors/blobSidecarError.d.ts +24 -0
  102. package/lib/chain/errors/blobSidecarError.js +10 -0
  103. package/lib/chain/errors/blobSidecarError.js.map +1 -1
  104. package/lib/chain/errors/blockError.js +1 -0
  105. package/lib/chain/errors/blockError.js.map +1 -1
  106. package/lib/chain/errors/dataColumnSidecarError.d.ts +42 -0
  107. package/lib/chain/errors/dataColumnSidecarError.js +14 -0
  108. package/lib/chain/errors/dataColumnSidecarError.js.map +1 -1
  109. package/lib/chain/errors/gossipValidation.js +1 -0
  110. package/lib/chain/errors/gossipValidation.js.map +1 -1
  111. package/lib/chain/errors/index.d.ts +2 -2
  112. package/lib/chain/errors/index.js +2 -2
  113. package/lib/chain/errors/index.js.map +1 -1
  114. package/lib/chain/forkChoice/index.js.map +1 -1
  115. package/lib/chain/genesis/genesis.js +16 -5
  116. package/lib/chain/genesis/genesis.js.map +1 -1
  117. package/lib/chain/index.d.ts +2 -2
  118. package/lib/chain/index.js +2 -2
  119. package/lib/chain/index.js.map +1 -1
  120. package/lib/chain/interface.d.ts +13 -9
  121. package/lib/chain/interface.js.map +1 -1
  122. package/lib/chain/lightClient/index.js +16 -9
  123. package/lib/chain/lightClient/index.js.map +1 -1
  124. package/lib/chain/lightClient/proofs.js.map +1 -1
  125. package/lib/chain/opPools/aggregatedAttestationPool.js +14 -9
  126. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  127. package/lib/chain/opPools/attestationPool.js +8 -3
  128. package/lib/chain/opPools/attestationPool.js.map +1 -1
  129. package/lib/chain/opPools/index.d.ts +1 -1
  130. package/lib/chain/opPools/index.js +1 -1
  131. package/lib/chain/opPools/index.js.map +1 -1
  132. package/lib/chain/opPools/opPool.js +10 -12
  133. package/lib/chain/opPools/opPool.js.map +1 -1
  134. package/lib/chain/opPools/syncCommitteeMessagePool.js +9 -6
  135. package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
  136. package/lib/chain/opPools/syncContributionAndProofPool.js +5 -2
  137. package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
  138. package/lib/chain/options.js +1 -1
  139. package/lib/chain/options.js.map +1 -1
  140. package/lib/chain/prepareNextSlot.js +141 -134
  141. package/lib/chain/prepareNextSlot.js.map +1 -1
  142. package/lib/chain/produceBlock/produceBlockBody.d.ts +1 -1
  143. package/lib/chain/produceBlock/produceBlockBody.js +3 -10
  144. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  145. package/lib/chain/regen/errors.js +1 -0
  146. package/lib/chain/regen/errors.js.map +1 -1
  147. package/lib/chain/regen/index.d.ts +1 -1
  148. package/lib/chain/regen/index.js +1 -1
  149. package/lib/chain/regen/index.js.map +1 -1
  150. package/lib/chain/regen/queued.js +35 -28
  151. package/lib/chain/regen/queued.js.map +1 -1
  152. package/lib/chain/regen/regen.js +1 -0
  153. package/lib/chain/regen/regen.js.map +1 -1
  154. package/lib/chain/reprocess.js +3 -1
  155. package/lib/chain/reprocess.js.map +1 -1
  156. package/lib/chain/seenCache/index.d.ts +1 -1
  157. package/lib/chain/seenCache/index.js +1 -1
  158. package/lib/chain/seenCache/index.js.map +1 -1
  159. package/lib/chain/seenCache/seenAggregateAndProof.js +7 -6
  160. package/lib/chain/seenCache/seenAggregateAndProof.js.map +1 -1
  161. package/lib/chain/seenCache/seenAttestationData.js +5 -2
  162. package/lib/chain/seenCache/seenAttestationData.js.map +1 -1
  163. package/lib/chain/seenCache/seenAttesters.js +2 -4
  164. package/lib/chain/seenCache/seenAttesters.js.map +1 -1
  165. package/lib/chain/seenCache/seenBlockProposers.js +2 -4
  166. package/lib/chain/seenCache/seenBlockProposers.js.map +1 -1
  167. package/lib/chain/seenCache/seenCommittee.js +1 -3
  168. package/lib/chain/seenCache/seenCommittee.js.map +1 -1
  169. package/lib/chain/seenCache/seenCommitteeContribution.js +3 -2
  170. package/lib/chain/seenCache/seenCommitteeContribution.js.map +1 -1
  171. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +74 -78
  172. package/lib/chain/seenCache/seenGossipBlockInput.js +235 -369
  173. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  174. package/lib/chain/shufflingCache.js +5 -2
  175. package/lib/chain/shufflingCache.js.map +1 -1
  176. package/lib/chain/stateCache/blockStateCacheImpl.js +13 -7
  177. package/lib/chain/stateCache/blockStateCacheImpl.js.map +1 -1
  178. package/lib/chain/stateCache/datastore/db.js +1 -0
  179. package/lib/chain/stateCache/datastore/db.js.map +1 -1
  180. package/lib/chain/stateCache/datastore/file.js +1 -0
  181. package/lib/chain/stateCache/datastore/file.js.map +1 -1
  182. package/lib/chain/stateCache/datastore/index.d.ts +1 -1
  183. package/lib/chain/stateCache/datastore/index.js +1 -1
  184. package/lib/chain/stateCache/datastore/index.js.map +1 -1
  185. package/lib/chain/stateCache/fifoBlockStateCache.js +10 -0
  186. package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
  187. package/lib/chain/stateCache/inMemoryCheckpointsCache.js +10 -4
  188. package/lib/chain/stateCache/inMemoryCheckpointsCache.js.map +1 -1
  189. package/lib/chain/stateCache/index.d.ts +1 -1
  190. package/lib/chain/stateCache/index.js +1 -1
  191. package/lib/chain/stateCache/index.js.map +1 -1
  192. package/lib/chain/stateCache/mapMetrics.js +4 -4
  193. package/lib/chain/stateCache/mapMetrics.js.map +1 -1
  194. package/lib/chain/stateCache/persistentCheckpointsCache.js +14 -6
  195. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  196. package/lib/chain/validation/blobSidecar.d.ts +8 -3
  197. package/lib/chain/validation/blobSidecar.js +73 -31
  198. package/lib/chain/validation/blobSidecar.js.map +1 -1
  199. package/lib/chain/validation/dataColumnSidecar.d.ts +7 -9
  200. package/lib/chain/validation/dataColumnSidecar.js +95 -57
  201. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  202. package/lib/chain/validation/index.d.ts +1 -1
  203. package/lib/chain/validation/index.js +1 -1
  204. package/lib/chain/validation/index.js.map +1 -1
  205. package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts +1 -2
  206. package/lib/chain/validation/signatureSets/aggregateAndProof.js.map +1 -1
  207. package/lib/chain/validatorMonitor.d.ts +1 -3
  208. package/lib/chain/validatorMonitor.js +2 -1
  209. package/lib/chain/validatorMonitor.js.map +1 -1
  210. package/lib/db/beacon.js +24 -0
  211. package/lib/db/beacon.js.map +1 -1
  212. package/lib/db/index.d.ts +1 -1
  213. package/lib/db/index.js.map +1 -1
  214. package/lib/db/repositories/blobSidecars.js.map +1 -1
  215. package/lib/db/repositories/blockArchive.js +4 -5
  216. package/lib/db/repositories/blockArchive.js.map +1 -1
  217. package/lib/db/repositories/blockArchiveIndex.d.ts +4 -0
  218. package/lib/db/repositories/blockArchiveIndex.js +13 -5
  219. package/lib/db/repositories/blockArchiveIndex.js.map +1 -1
  220. package/lib/db/repositories/dataColumnSidecar.js +8 -7
  221. package/lib/db/repositories/dataColumnSidecar.js.map +1 -1
  222. package/lib/db/repositories/dataColumnSidecarArchive.js +17 -7
  223. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
  224. package/lib/db/repositories/depositDataRoot.js +1 -0
  225. package/lib/db/repositories/depositDataRoot.js.map +1 -1
  226. package/lib/db/repositories/index.d.ts +10 -10
  227. package/lib/db/repositories/index.js +9 -9
  228. package/lib/db/repositories/index.js.map +1 -1
  229. package/lib/db/repositories/stateArchive.js +3 -2
  230. package/lib/db/repositories/stateArchive.js.map +1 -1
  231. package/lib/db/repositories/stateArchiveIndex.d.ts +1 -0
  232. package/lib/db/repositories/stateArchiveIndex.js +6 -2
  233. package/lib/db/repositories/stateArchiveIndex.js.map +1 -1
  234. package/lib/db/single/preGenesisState.d.ts +1 -0
  235. package/lib/db/single/preGenesisState.js +11 -4
  236. package/lib/db/single/preGenesisState.js.map +1 -1
  237. package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts +1 -0
  238. package/lib/db/single/preGenesisStateLastProcessedBlock.js +10 -4
  239. package/lib/db/single/preGenesisStateLastProcessedBlock.js.map +1 -1
  240. package/lib/eth1/eth1DataCache.js +2 -0
  241. package/lib/eth1/eth1DataCache.js.map +1 -1
  242. package/lib/eth1/eth1DepositDataTracker.js +18 -5
  243. package/lib/eth1/eth1DepositDataTracker.js.map +1 -1
  244. package/lib/eth1/eth1DepositsCache.js +3 -0
  245. package/lib/eth1/eth1DepositsCache.js.map +1 -1
  246. package/lib/eth1/eth1MergeBlockTracker.js +10 -4
  247. package/lib/eth1/eth1MergeBlockTracker.js.map +1 -1
  248. package/lib/eth1/index.js +2 -0
  249. package/lib/eth1/index.js.map +1 -1
  250. package/lib/eth1/provider/eth1Provider.d.ts +1 -2
  251. package/lib/eth1/provider/eth1Provider.js +6 -2
  252. package/lib/eth1/provider/eth1Provider.js.map +1 -1
  253. package/lib/eth1/provider/jsonRpcHttpClient.d.ts +1 -1
  254. package/lib/eth1/provider/jsonRpcHttpClient.js +16 -2
  255. package/lib/eth1/provider/jsonRpcHttpClient.js.map +1 -1
  256. package/lib/eth1/provider/jwt.js.map +1 -1
  257. package/lib/eth1/provider/utils.d.ts +5 -0
  258. package/lib/eth1/provider/utils.js +9 -1
  259. package/lib/eth1/provider/utils.js.map +1 -1
  260. package/lib/eth1/utils/deposits.js.map +1 -1
  261. package/lib/execution/builder/cache.js +6 -0
  262. package/lib/execution/builder/cache.js.map +1 -1
  263. package/lib/execution/builder/http.js +14 -8
  264. package/lib/execution/builder/http.js.map +1 -1
  265. package/lib/execution/builder/index.js.map +1 -1
  266. package/lib/execution/engine/disabled.js +2 -4
  267. package/lib/execution/engine/disabled.js.map +1 -1
  268. package/lib/execution/engine/http.d.ts +2 -2
  269. package/lib/execution/engine/http.js +43 -11
  270. package/lib/execution/engine/http.js.map +1 -1
  271. package/lib/execution/engine/interface.d.ts +2 -2
  272. package/lib/execution/engine/interface.js.map +1 -1
  273. package/lib/execution/engine/mock.d.ts +1 -0
  274. package/lib/execution/engine/mock.js +16 -12
  275. package/lib/execution/engine/mock.js.map +1 -1
  276. package/lib/execution/engine/payloadIdCache.js +1 -3
  277. package/lib/execution/engine/payloadIdCache.js.map +1 -1
  278. package/lib/execution/engine/types.d.ts +5 -1
  279. package/lib/execution/engine/types.js +37 -8
  280. package/lib/execution/engine/types.js.map +1 -1
  281. package/lib/execution/engine/utils.js +3 -3
  282. package/lib/execution/engine/utils.js.map +1 -1
  283. package/lib/execution/index.d.ts +2 -2
  284. package/lib/execution/index.js +2 -2
  285. package/lib/execution/index.js.map +1 -1
  286. package/lib/index.d.ts +6 -6
  287. package/lib/index.js +5 -5
  288. package/lib/index.js.map +1 -1
  289. package/lib/metrics/index.d.ts +1 -1
  290. package/lib/metrics/index.js +1 -1
  291. package/lib/metrics/index.js.map +1 -1
  292. package/lib/metrics/metrics/beacon.d.ts +11 -5
  293. package/lib/metrics/metrics/beacon.js +40 -20
  294. package/lib/metrics/metrics/beacon.js.map +1 -1
  295. package/lib/metrics/metrics/lodestar.d.ts +55 -13
  296. package/lib/metrics/metrics/lodestar.js +85 -8
  297. package/lib/metrics/metrics/lodestar.js.map +1 -1
  298. package/lib/metrics/metrics.d.ts +1 -1
  299. package/lib/metrics/metrics.js.map +1 -1
  300. package/lib/metrics/nodeJsMetrics.js +1 -1
  301. package/lib/metrics/nodeJsMetrics.js.map +1 -1
  302. package/lib/metrics/server/http.d.ts +1 -1
  303. package/lib/metrics/utils/avgMinMax.d.ts +1 -1
  304. package/lib/metrics/utils/avgMinMax.js +10 -6
  305. package/lib/metrics/utils/avgMinMax.js.map +1 -1
  306. package/lib/metrics/utils/gauge.d.ts +1 -1
  307. package/lib/metrics/utils/gauge.js +1 -4
  308. package/lib/metrics/utils/gauge.js.map +1 -1
  309. package/lib/metrics/utils/registryMetricCreator.d.ts +1 -1
  310. package/lib/metrics/utils/registryMetricCreator.js.map +1 -1
  311. package/lib/monitoring/properties.js +4 -0
  312. package/lib/monitoring/properties.js.map +1 -1
  313. package/lib/monitoring/service.js +13 -1
  314. package/lib/monitoring/service.js.map +1 -1
  315. package/lib/monitoring/system.js +25 -27
  316. package/lib/monitoring/system.js.map +1 -1
  317. package/lib/network/core/networkCore.d.ts +2 -2
  318. package/lib/network/core/networkCore.js +67 -50
  319. package/lib/network/core/networkCore.js.map +1 -1
  320. package/lib/network/core/networkCoreWorker.js +1 -1
  321. package/lib/network/core/networkCoreWorker.js.map +1 -1
  322. package/lib/network/core/networkCoreWorkerHandler.d.ts +2 -2
  323. package/lib/network/core/networkCoreWorkerHandler.js +14 -5
  324. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  325. package/lib/network/discv5/index.d.ts +2 -2
  326. package/lib/network/discv5/index.js +9 -3
  327. package/lib/network/discv5/index.js.map +1 -1
  328. package/lib/network/discv5/worker.js +3 -3
  329. package/lib/network/discv5/worker.js.map +1 -1
  330. package/lib/network/events.d.ts +2 -18
  331. package/lib/network/events.js +0 -7
  332. package/lib/network/events.js.map +1 -1
  333. package/lib/network/gossip/encoding.d.ts +1 -1
  334. package/lib/network/gossip/encoding.js +4 -2
  335. package/lib/network/gossip/encoding.js.map +1 -1
  336. package/lib/network/gossip/errors.js +1 -0
  337. package/lib/network/gossip/errors.js.map +1 -1
  338. package/lib/network/gossip/gossipsub.d.ts +2 -1
  339. package/lib/network/gossip/gossipsub.js +43 -17
  340. package/lib/network/gossip/gossipsub.js.map +1 -1
  341. package/lib/network/gossip/index.d.ts +2 -2
  342. package/lib/network/gossip/index.js +2 -2
  343. package/lib/network/gossip/index.js.map +1 -1
  344. package/lib/network/gossip/interface.d.ts +2 -2
  345. package/lib/network/gossip/metrics.d.ts +15 -7
  346. package/lib/network/gossip/metrics.js +16 -6
  347. package/lib/network/gossip/metrics.js.map +1 -1
  348. package/lib/network/gossip/topic.d.ts +125 -105
  349. package/lib/network/gossip/topic.js +2 -1
  350. package/lib/network/gossip/topic.js.map +1 -1
  351. package/lib/network/index.d.ts +3 -3
  352. package/lib/network/index.js +3 -3
  353. package/lib/network/index.js.map +1 -1
  354. package/lib/network/interface.d.ts +3 -2
  355. package/lib/network/libp2p/index.js +11 -3
  356. package/lib/network/libp2p/index.js.map +1 -1
  357. package/lib/network/metadata.js +6 -1
  358. package/lib/network/metadata.js.map +1 -1
  359. package/lib/network/network.d.ts +4 -2
  360. package/lib/network/network.js +89 -71
  361. package/lib/network/network.js.map +1 -1
  362. package/lib/network/options.js +1 -1
  363. package/lib/network/options.js.map +1 -1
  364. package/lib/network/peers/datastore.d.ts +2 -2
  365. package/lib/network/peers/datastore.js +10 -4
  366. package/lib/network/peers/datastore.js.map +1 -1
  367. package/lib/network/peers/discover.js +75 -66
  368. package/lib/network/peers/discover.js.map +1 -1
  369. package/lib/network/peers/peerManager.js +154 -130
  370. package/lib/network/peers/peerManager.js.map +1 -1
  371. package/lib/network/peers/peersData.d.ts +1 -1
  372. package/lib/network/peers/peersData.js +1 -3
  373. package/lib/network/peers/peersData.js.map +1 -1
  374. package/lib/network/peers/score/index.d.ts +1 -1
  375. package/lib/network/peers/score/index.js +1 -1
  376. package/lib/network/peers/score/index.js.map +1 -1
  377. package/lib/network/peers/score/score.js +6 -0
  378. package/lib/network/peers/score/score.js.map +1 -1
  379. package/lib/network/peers/score/store.js +3 -0
  380. package/lib/network/peers/score/store.js.map +1 -1
  381. package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
  382. package/lib/network/peers/utils/subnetMap.js +2 -4
  383. package/lib/network/peers/utils/subnetMap.js.map +1 -1
  384. package/lib/network/processor/aggregatorTracker.js +1 -3
  385. package/lib/network/processor/aggregatorTracker.js.map +1 -1
  386. package/lib/network/processor/gossipHandlers.js +145 -165
  387. package/lib/network/processor/gossipHandlers.js.map +1 -1
  388. package/lib/network/processor/gossipQueues/indexed.js +11 -9
  389. package/lib/network/processor/gossipQueues/indexed.js.map +1 -1
  390. package/lib/network/processor/gossipQueues/linear.js +9 -8
  391. package/lib/network/processor/gossipQueues/linear.js.map +1 -1
  392. package/lib/network/processor/index.d.ts +2 -1
  393. package/lib/network/processor/index.js +22 -8
  394. package/lib/network/processor/index.js.map +1 -1
  395. package/lib/network/reqresp/ReqRespBeaconNode.d.ts +1 -1
  396. package/lib/network/reqresp/ReqRespBeaconNode.js +11 -2
  397. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  398. package/lib/network/reqresp/handlers/beaconBlocksByRange.js +1 -2
  399. package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
  400. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -1
  401. package/lib/network/reqresp/index.d.ts +1 -3
  402. package/lib/network/reqresp/index.js +1 -3
  403. package/lib/network/reqresp/index.js.map +1 -1
  404. package/lib/network/reqresp/rateLimit.js +11 -5
  405. package/lib/network/reqresp/rateLimit.js.map +1 -1
  406. package/lib/network/reqresp/utils/dataColumnResponseValidation.js +8 -4
  407. package/lib/network/reqresp/utils/dataColumnResponseValidation.js.map +1 -1
  408. package/lib/network/statusCache.js +1 -0
  409. package/lib/network/statusCache.js.map +1 -1
  410. package/lib/network/subnets/attnetsService.js +73 -65
  411. package/lib/network/subnets/attnetsService.js.map +1 -1
  412. package/lib/network/subnets/interface.js +1 -1
  413. package/lib/network/subnets/interface.js.map +1 -1
  414. package/lib/network/subnets/syncnetsService.js +29 -22
  415. package/lib/network/subnets/syncnetsService.js.map +1 -1
  416. package/lib/network/subnets/util.js +1 -2
  417. package/lib/network/subnets/util.js.map +1 -1
  418. package/lib/node/nodejs.d.ts +1 -1
  419. package/lib/node/nodejs.js +15 -0
  420. package/lib/node/nodejs.js.map +1 -1
  421. package/lib/node/notifier.js +1 -2
  422. package/lib/node/notifier.js.map +1 -1
  423. package/lib/node/options.js.map +1 -1
  424. package/lib/node/utils/interop/state.js +1 -2
  425. package/lib/node/utils/interop/state.js.map +1 -1
  426. package/lib/sync/backfill/backfill.d.ts +1 -1
  427. package/lib/sync/backfill/backfill.js +58 -16
  428. package/lib/sync/backfill/backfill.js.map +1 -1
  429. package/lib/sync/constants.d.ts +2 -1
  430. package/lib/sync/constants.js +2 -1
  431. package/lib/sync/constants.js.map +1 -1
  432. package/lib/sync/interface.d.ts +1 -59
  433. package/lib/sync/interface.js +0 -20
  434. package/lib/sync/interface.js.map +1 -1
  435. package/lib/sync/options.d.ts +1 -1
  436. package/lib/sync/range/batch.d.ts +48 -32
  437. package/lib/sync/range/batch.js +201 -55
  438. package/lib/sync/range/batch.js.map +1 -1
  439. package/lib/sync/range/chain.d.ts +15 -10
  440. package/lib/sync/range/chain.js +141 -70
  441. package/lib/sync/range/chain.js.map +1 -1
  442. package/lib/sync/range/range.d.ts +3 -3
  443. package/lib/sync/range/range.js +86 -54
  444. package/lib/sync/range/range.js.map +1 -1
  445. package/lib/sync/range/utils/hashBlocks.d.ts +2 -2
  446. package/lib/sync/range/utils/hashBlocks.js +6 -4
  447. package/lib/sync/range/utils/hashBlocks.js.map +1 -1
  448. package/lib/sync/range/utils/peerBalancer.js +18 -13
  449. package/lib/sync/range/utils/peerBalancer.js.map +1 -1
  450. package/lib/sync/sync.d.ts +1 -2
  451. package/lib/sync/sync.js +95 -87
  452. package/lib/sync/sync.js.map +1 -1
  453. package/lib/sync/types.d.ts +44 -0
  454. package/lib/sync/types.js +34 -0
  455. package/lib/sync/types.js.map +1 -0
  456. package/lib/sync/unknownBlock.d.ts +42 -28
  457. package/lib/sync/unknownBlock.js +405 -458
  458. package/lib/sync/unknownBlock.js.map +1 -1
  459. package/lib/sync/utils/downloadByRange.d.ts +186 -0
  460. package/lib/sync/utils/downloadByRange.js +457 -0
  461. package/lib/sync/utils/downloadByRange.js.map +1 -0
  462. package/lib/sync/utils/downloadByRoot.d.ts +121 -0
  463. package/lib/sync/utils/downloadByRoot.js +346 -0
  464. package/lib/sync/utils/downloadByRoot.js.map +1 -0
  465. package/lib/sync/utils/pendingBlocksTree.d.ts +14 -6
  466. package/lib/sync/utils/pendingBlocksTree.js +24 -18
  467. package/lib/sync/utils/pendingBlocksTree.js.map +1 -1
  468. package/lib/util/array.js +7 -3
  469. package/lib/util/array.js.map +1 -1
  470. package/lib/util/asyncIterableToEvents.js +6 -3
  471. package/lib/util/asyncIterableToEvents.js.map +1 -1
  472. package/lib/util/binarySearch.js +2 -0
  473. package/lib/util/binarySearch.js.map +1 -1
  474. package/lib/util/blobs.d.ts +2 -2
  475. package/lib/util/blobs.js +4 -4
  476. package/lib/util/blobs.js.map +1 -1
  477. package/lib/util/bufferPool.js +7 -2
  478. package/lib/util/bufferPool.js.map +1 -1
  479. package/lib/util/clock.d.ts +1 -1
  480. package/lib/util/clock.js +23 -18
  481. package/lib/util/clock.js.map +1 -1
  482. package/lib/util/dataColumns.d.ts +13 -10
  483. package/lib/util/dataColumns.js +92 -134
  484. package/lib/util/dataColumns.js.map +1 -1
  485. package/lib/util/execution.d.ts +20 -0
  486. package/lib/util/execution.js +165 -0
  487. package/lib/util/execution.js.map +1 -0
  488. package/lib/util/itTrigger.js +4 -4
  489. package/lib/util/itTrigger.js.map +1 -1
  490. package/lib/util/map.js +2 -0
  491. package/lib/util/map.js.map +1 -1
  492. package/lib/util/queue/index.d.ts +1 -1
  493. package/lib/util/queue/index.js +1 -1
  494. package/lib/util/queue/index.js.map +1 -1
  495. package/lib/util/queue/itemQueue.js +52 -49
  496. package/lib/util/queue/itemQueue.js.map +1 -1
  497. package/lib/util/serializedCache.js +1 -3
  498. package/lib/util/serializedCache.js.map +1 -1
  499. package/lib/util/set.js +2 -0
  500. package/lib/util/set.js.map +1 -1
  501. package/lib/util/sszBytes.d.ts +1 -0
  502. package/lib/util/sszBytes.js +1 -1
  503. package/lib/util/sszBytes.js.map +1 -1
  504. package/lib/util/timeSeries.js +3 -1
  505. package/lib/util/timeSeries.js.map +1 -1
  506. package/lib/util/types.d.ts +1 -1
  507. package/lib/util/types.js +2 -2
  508. package/lib/util/types.js.map +1 -1
  509. package/lib/util/wrapError.d.ts +7 -0
  510. package/package.json +36 -18
  511. package/lib/chain/seenCache/seenBlockInput.d.ts +0 -84
  512. package/lib/chain/seenCache/seenBlockInput.js +0 -225
  513. package/lib/chain/seenCache/seenBlockInput.js.map +0 -1
  514. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.d.ts +0 -28
  515. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js +0 -328
  516. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js.map +0 -1
  517. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.d.ts +0 -49
  518. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js +0 -499
  519. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js.map +0 -1
@@ -1,5 +1,7 @@
1
- import { ForkSeq } from "@lodestar/params";
1
+ import { isForkPostDeneb, isForkPostFulu } from "@lodestar/params";
2
2
  import { LodestarError } from "@lodestar/utils";
3
+ import { isBlockInputColumns } from "../../chain/blocks/blockInput/blockInput.js";
4
+ import { isDaOutOfRange } from "../../chain/blocks/blockInput/utils.js";
3
5
  import { BlockError, BlockErrorCode } from "../../chain/errors/index.js";
4
6
  import { MAX_BATCH_DOWNLOAD_ATTEMPTS, MAX_BATCH_PROCESSING_ATTEMPTS } from "../constants.js";
5
7
  import { getBatchSlotRange, hashBlocks } from "./utils/index.js";
@@ -37,33 +39,172 @@ export var BatchStatus;
37
39
  * Jul2022: Offset changed from 1 to 0, see rationale in {@link BATCH_SLOT_OFFSET}
38
40
  */
39
41
  export class Batch {
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 = [];
49
- const { startSlot, count } = getBatchSlotRange(startEpoch);
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) {
50
62
  this.config = config;
63
+ this.clock = clock;
64
+ this.custodyConfig = custodyConfig;
65
+ const { startSlot, count } = getBatchSlotRange(startEpoch);
66
+ this.forkName = this.config.getForkName(startSlot);
51
67
  this.startEpoch = startEpoch;
52
- this.request = {
53
- startSlot,
54
- count,
55
- step: 1,
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
+ },
56
194
  };
57
195
  }
58
196
  /**
59
197
  * Gives a list of peers from which this batch has had a failed download or processing attempt.
60
198
  */
61
199
  getFailedPeers() {
62
- return [...this.failedDownloadAttempts, ...this.failedProcessingAttempts.map((a) => a.peer)];
200
+ return [...this.failedDownloadAttempts, ...this.failedProcessingAttempts.flatMap((a) => a.peers)];
63
201
  }
64
202
  getMetadata() {
65
203
  return { startEpoch: this.startEpoch, status: this.state.status };
66
204
  }
205
+ getBlocks() {
206
+ return this.state.blocks;
207
+ }
67
208
  /**
68
209
  * AwaitingDownload -> Downloading
69
210
  */
@@ -71,57 +212,56 @@ export class Batch {
71
212
  if (this.state.status !== BatchStatus.AwaitingDownload) {
72
213
  throw new BatchError(this.wrongStatusErrorType(BatchStatus.AwaitingDownload));
73
214
  }
74
- const { partialDownload } = this.state;
75
- this.state = { status: BatchStatus.Downloading, peer, partialDownload };
76
- return partialDownload;
215
+ this.state = { status: BatchStatus.Downloading, peer, blocks: this.state.blocks };
77
216
  }
78
217
  /**
79
218
  * Downloading -> AwaitingProcessing
80
- * pendingDataColumns is null when a complete download is done, otherwise it contains the columns that are still pending
81
219
  */
82
- downloadingSuccess(downloadResult) {
220
+ downloadingSuccess(peer, blocks) {
83
221
  if (this.state.status !== BatchStatus.Downloading) {
84
222
  throw new BatchError(this.wrongStatusErrorType(BatchStatus.Downloading));
85
223
  }
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;
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 };
91
246
  }
92
247
  else {
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 };
248
+ this.requests = this.getRequests(blocks);
249
+ this.state = { status: BatchStatus.AwaitingDownload, blocks };
250
+ }
251
+ return this.state;
111
252
  }
112
253
  /**
113
254
  * Downloading -> AwaitingDownload
114
255
  */
115
- downloadingError() {
256
+ downloadingError(peer) {
116
257
  if (this.state.status !== BatchStatus.Downloading) {
117
258
  throw new BatchError(this.wrongStatusErrorType(BatchStatus.Downloading));
118
259
  }
119
- this.failedDownloadAttempts.push(this.state.peer);
260
+ this.failedDownloadAttempts.push(peer);
120
261
  if (this.failedDownloadAttempts.length > MAX_BATCH_DOWNLOAD_ATTEMPTS) {
121
262
  throw new BatchError(this.errorType({ code: BatchErrorCode.MAX_DOWNLOAD_ATTEMPTS }));
122
263
  }
123
- const { partialDownload } = this.state;
124
- this.state = { status: BatchStatus.AwaitingDownload, partialDownload };
264
+ this.state = { status: BatchStatus.AwaitingDownload, blocks: this.state.blocks };
125
265
  }
126
266
  /**
127
267
  * AwaitingProcessing -> Processing
@@ -132,7 +272,11 @@ export class Batch {
132
272
  }
133
273
  const blocks = this.state.blocks;
134
274
  const hash = hashBlocks(blocks, this.config); // tracks blocks to report peer on processing error
135
- this.state = { status: BatchStatus.Processing, attempt: { peer: this.state.peer, hash } };
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 } };
136
280
  return blocks;
137
281
  }
138
282
  /**
@@ -142,7 +286,7 @@ export class Batch {
142
286
  if (this.state.status !== BatchStatus.Processing) {
143
287
  throw new BatchError(this.wrongStatusErrorType(BatchStatus.Processing));
144
288
  }
145
- this.state = { status: BatchStatus.AwaitingValidation, attempt: this.state.attempt };
289
+ this.state = { status: BatchStatus.AwaitingValidation, blocks: this.state.blocks, attempt: this.state.attempt };
146
290
  }
147
291
  /**
148
292
  * Processing -> AwaitingDownload
@@ -181,22 +325,23 @@ export class Batch {
181
325
  }
182
326
  return this.state.attempt;
183
327
  }
184
- isPostFulu() {
185
- return this.config.getForkSeq(this.request.startSlot) >= ForkSeq.fulu;
186
- }
187
328
  onExecutionEngineError(attempt) {
188
329
  this.executionErrorAttempts.push(attempt);
189
330
  if (this.executionErrorAttempts.length > MAX_BATCH_PROCESSING_ATTEMPTS) {
190
331
  throw new BatchError(this.errorType({ code: BatchErrorCode.MAX_EXECUTION_ENGINE_ERROR_ATTEMPTS }));
191
332
  }
192
- this.state = { status: BatchStatus.AwaitingDownload, partialDownload: null };
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: [] };
193
336
  }
194
337
  onProcessingError(attempt) {
195
338
  this.failedProcessingAttempts.push(attempt);
196
339
  if (this.failedProcessingAttempts.length > MAX_BATCH_PROCESSING_ATTEMPTS) {
197
340
  throw new BatchError(this.errorType({ code: BatchErrorCode.MAX_PROCESSING_ATTEMPTS }));
198
341
  }
199
- this.state = { status: BatchStatus.AwaitingDownload, partialDownload: null };
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: [] };
200
345
  }
201
346
  /** Helper to construct typed BatchError. Stack traces are correct as the error is thrown above */
202
347
  errorType(type) {
@@ -209,6 +354,7 @@ export class Batch {
209
354
  export var BatchErrorCode;
210
355
  (function (BatchErrorCode) {
211
356
  BatchErrorCode["WRONG_STATUS"] = "BATCH_ERROR_WRONG_STATUS";
357
+ BatchErrorCode["INVALID_COUNT"] = "BATCH_ERROR_INVALID_COUNT";
212
358
  BatchErrorCode["MAX_DOWNLOAD_ATTEMPTS"] = "BATCH_ERROR_MAX_DOWNLOAD_ATTEMPTS";
213
359
  BatchErrorCode["MAX_PROCESSING_ATTEMPTS"] = "BATCH_ERROR_MAX_PROCESSING_ATTEMPTS";
214
360
  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":"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"}
1
+ {"version":3,"file":"batch.js","sourceRoot":"","sources":["../../../src/sync/range/batch.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,20 @@
1
1
  import { ChainForkConfig } from "@lodestar/config";
2
- import { Epoch, Root, Slot, phase0 } from "@lodestar/types";
2
+ import { Epoch, Root, Slot } from "@lodestar/types";
3
3
  import { Logger } from "@lodestar/utils";
4
- import { BlockInput } from "../../chain/blocks/types.js";
4
+ import { IBlockInput } from "../../chain/blocks/blockInput/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
+ import { IClock } from "../../util/clock.js";
9
9
  import { CustodyConfig } from "../../util/dataColumns.js";
10
10
  import { PeerIdStr } from "../../util/peerId.js";
11
+ import { WarnResult } from "../../util/wrapError.js";
12
+ import { DownloadByRangeError } from "../utils/downloadByRange.js";
11
13
  import { RangeSyncType } from "../utils/remoteSyncType.js";
12
- import { BatchErrorCode, BatchMetadata } from "./batch.js";
14
+ import { Batch, BatchErrorCode, BatchMetadata } from "./batch.js";
13
15
  export type SyncChainModules = {
14
16
  config: ChainForkConfig;
17
+ clock: IClock;
15
18
  custodyConfig: CustodyConfig;
16
19
  logger: Logger;
17
20
  metrics: Metrics | null;
@@ -21,18 +24,17 @@ export type SyncChainFns = {
21
24
  * Must return if ALL blocks are processed successfully
22
25
  * If SOME blocks are processed must throw BlockProcessorError()
23
26
  */
24
- processChainSegment: (blocks: BlockInput[], syncType: RangeSyncType) => Promise<void>;
27
+ processChainSegment: (blocks: IBlockInput[], syncType: RangeSyncType) => Promise<void>;
25
28
  /** Must download blocks, and validate their range */
26
- downloadBeaconBlocksByRange: (peer: PeerSyncMeta, request: phase0.BeaconBlocksByRangeRequest, partialDownload: PartialDownload, syncType: RangeSyncType) => Promise<{
27
- blocks: BlockInput[];
28
- pendingDataColumns: null | number[];
29
- }>;
29
+ downloadByRange: (peer: PeerSyncMeta, batch: Batch, syncType: RangeSyncType) => Promise<WarnResult<IBlockInput[], DownloadByRangeError>>;
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;
36
38
  };
37
39
  /**
38
40
  * Sync this up to this target. Uses slot instead of epoch to re-use logic for finalized sync
@@ -86,9 +88,10 @@ export declare class SyncChain {
86
88
  private lastEpochWithProcessBlocks;
87
89
  private status;
88
90
  private readonly processChainSegment;
89
- private readonly downloadBeaconBlocksByRange;
91
+ private readonly downloadByRange;
90
92
  private readonly reportPeer;
91
93
  private readonly getConnectedPeerSyncMeta;
94
+ private readonly pruneBlockInputs;
92
95
  /** AsyncIterable that guarantees processChainSegment is run only at once at anytime */
93
96
  private readonly batchProcessor;
94
97
  /** Sorted map of batches undergoing some kind of processing. */
@@ -96,6 +99,8 @@ export declare class SyncChain {
96
99
  private readonly peerset;
97
100
  private readonly logger;
98
101
  private readonly config;
102
+ private readonly clock;
103
+ private readonly metrics;
99
104
  private readonly custodyConfig;
100
105
  constructor(initialBatchEpoch: Epoch, initialTarget: ChainTarget, syncType: RangeSyncType, fns: SyncChainFns, modules: SyncChainModules);
101
106
  /**