@lodestar/beacon-node 1.35.0-dev.549f58dd39 → 1.35.0-dev.56313c7299

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 (1366) 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/config/constants.d.ts +0 -5
  4. package/lib/api/impl/config/constants.js +1 -6
  5. package/lib/api/impl/config/constants.js.map +1 -1
  6. package/lib/api/impl/debug/index.js +1 -1
  7. package/lib/api/impl/debug/index.js.map +1 -1
  8. package/lib/api/impl/errors.js +0 -2
  9. package/lib/api/impl/errors.js.map +1 -1
  10. package/lib/api/impl/index.d.ts +3 -3
  11. package/lib/api/impl/index.js +3 -3
  12. package/lib/api/impl/index.js.map +1 -1
  13. package/lib/api/impl/lodestar/index.js +1 -1
  14. package/lib/api/impl/lodestar/index.js.map +1 -1
  15. package/lib/api/impl/validator/index.js +4 -7
  16. package/lib/api/impl/validator/index.js.map +1 -1
  17. package/lib/api/rest/activeSockets.js +2 -3
  18. package/lib/api/rest/activeSockets.js.map +1 -1
  19. package/lib/api/rest/base.d.ts +1 -1
  20. package/lib/api/rest/base.js +2 -6
  21. package/lib/api/rest/base.js.map +1 -1
  22. package/lib/api/rest/index.js +0 -2
  23. package/lib/api/rest/index.js.map +1 -1
  24. package/lib/api/rest/swaggerUI.js +2 -4
  25. package/lib/api/rest/swaggerUI.js.map +1 -1
  26. package/lib/chain/archiveStore/archiveStore.js +38 -49
  27. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  28. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js +0 -3
  29. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js.map +1 -1
  30. package/lib/chain/archiveStore/historicalState/worker.js +1 -1
  31. package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
  32. package/lib/chain/archiveStore/index.d.ts +1 -1
  33. package/lib/chain/archiveStore/index.js +1 -1
  34. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js +0 -5
  35. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js.map +1 -1
  36. package/lib/chain/balancesCache.js +3 -1
  37. package/lib/chain/balancesCache.js.map +1 -1
  38. package/lib/chain/beaconProposerCache.js +0 -1
  39. package/lib/chain/beaconProposerCache.js.map +1 -1
  40. package/lib/chain/blocks/blockInput/blockInput.d.ts +7 -19
  41. package/lib/chain/blocks/blockInput/blockInput.js +89 -133
  42. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  43. package/lib/chain/blocks/blockInput/index.d.ts +1 -1
  44. package/lib/chain/blocks/blockInput/index.js +1 -1
  45. package/lib/chain/blocks/blockInput/types.d.ts +10 -19
  46. package/lib/chain/blocks/blockInput/types.js +0 -1
  47. package/lib/chain/blocks/blockInput/types.js.map +1 -1
  48. package/lib/chain/blocks/blockInput/utils.d.ts +4 -0
  49. package/lib/chain/blocks/blockInput/utils.js +29 -6
  50. package/lib/chain/blocks/blockInput/utils.js.map +1 -1
  51. package/lib/chain/blocks/importBlock.js +14 -19
  52. package/lib/chain/blocks/importBlock.js.map +1 -1
  53. package/lib/chain/blocks/index.d.ts +5 -6
  54. package/lib/chain/blocks/index.js +4 -5
  55. package/lib/chain/blocks/index.js.map +1 -1
  56. package/lib/chain/blocks/types.d.ts +106 -3
  57. package/lib/chain/blocks/types.js +119 -0
  58. package/lib/chain/blocks/types.js.map +1 -1
  59. package/lib/chain/blocks/utils/chainSegment.d.ts +2 -2
  60. package/lib/chain/blocks/utils/chainSegment.js +2 -2
  61. package/lib/chain/blocks/utils/chainSegment.js.map +1 -1
  62. package/lib/chain/blocks/verifyBlock.d.ts +3 -3
  63. package/lib/chain/blocks/verifyBlock.js +14 -15
  64. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  65. package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts +22 -7
  66. package/lib/chain/blocks/verifyBlocksDataAvailability.js +108 -23
  67. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  68. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +3 -4
  69. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +22 -24
  70. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  71. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts +3 -4
  72. package/lib/chain/blocks/verifyBlocksSanityChecks.js +2 -2
  73. package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
  74. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts +2 -3
  75. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js +2 -2
  76. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
  77. package/lib/chain/blocks/writeBlockInputToDb.d.ts +3 -3
  78. package/lib/chain/blocks/writeBlockInputToDb.js +67 -56
  79. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  80. package/lib/chain/bls/multithread/index.js +163 -168
  81. package/lib/chain/bls/multithread/index.js.map +1 -1
  82. package/lib/chain/bls/singleThread.js +0 -1
  83. package/lib/chain/bls/singleThread.js.map +1 -1
  84. package/lib/chain/chain.d.ts +11 -13
  85. package/lib/chain/chain.js +23 -81
  86. package/lib/chain/chain.js.map +1 -1
  87. package/lib/chain/emitter.d.ts +2 -43
  88. package/lib/chain/emitter.js +0 -18
  89. package/lib/chain/emitter.js.map +1 -1
  90. package/lib/chain/errors/blobSidecarError.d.ts +0 -24
  91. package/lib/chain/errors/blobSidecarError.js +0 -10
  92. package/lib/chain/errors/blobSidecarError.js.map +1 -1
  93. package/lib/chain/errors/blockError.js +0 -1
  94. package/lib/chain/errors/blockError.js.map +1 -1
  95. package/lib/chain/errors/dataColumnSidecarError.d.ts +0 -42
  96. package/lib/chain/errors/dataColumnSidecarError.js +0 -14
  97. package/lib/chain/errors/dataColumnSidecarError.js.map +1 -1
  98. package/lib/chain/errors/gossipValidation.js +0 -1
  99. package/lib/chain/errors/gossipValidation.js.map +1 -1
  100. package/lib/chain/errors/index.d.ts +2 -2
  101. package/lib/chain/errors/index.js +2 -2
  102. package/lib/chain/errors/index.js.map +1 -1
  103. package/lib/chain/forkChoice/index.js.map +1 -1
  104. package/lib/chain/genesis/genesis.js +5 -16
  105. package/lib/chain/genesis/genesis.js.map +1 -1
  106. package/lib/chain/index.d.ts +2 -2
  107. package/lib/chain/index.js +2 -2
  108. package/lib/chain/index.js.map +1 -1
  109. package/lib/chain/interface.d.ts +9 -12
  110. package/lib/chain/interface.js.map +1 -1
  111. package/lib/chain/lightClient/index.js +9 -16
  112. package/lib/chain/lightClient/index.js.map +1 -1
  113. package/lib/chain/lightClient/proofs.js.map +1 -1
  114. package/lib/chain/opPools/aggregatedAttestationPool.js +9 -14
  115. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  116. package/lib/chain/opPools/attestationPool.d.ts +3 -2
  117. package/lib/chain/opPools/attestationPool.js +7 -10
  118. package/lib/chain/opPools/attestationPool.js.map +1 -1
  119. package/lib/chain/opPools/index.d.ts +1 -1
  120. package/lib/chain/opPools/index.js +1 -1
  121. package/lib/chain/opPools/index.js.map +1 -1
  122. package/lib/chain/opPools/opPool.js +12 -10
  123. package/lib/chain/opPools/opPool.js.map +1 -1
  124. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts +2 -3
  125. package/lib/chain/opPools/syncCommitteeMessagePool.js +10 -14
  126. package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
  127. package/lib/chain/opPools/syncContributionAndProofPool.js +2 -5
  128. package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
  129. package/lib/chain/opPools/types.d.ts +1 -1
  130. package/lib/chain/opPools/types.js +1 -1
  131. package/lib/chain/opPools/types.js.map +1 -1
  132. package/lib/chain/options.js +1 -1
  133. package/lib/chain/options.js.map +1 -1
  134. package/lib/chain/prepareNextSlot.d.ts +3 -3
  135. package/lib/chain/prepareNextSlot.js +140 -145
  136. package/lib/chain/prepareNextSlot.js.map +1 -1
  137. package/lib/chain/produceBlock/produceBlockBody.d.ts +1 -1
  138. package/lib/chain/produceBlock/produceBlockBody.js +10 -3
  139. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  140. package/lib/chain/regen/errors.js +0 -1
  141. package/lib/chain/regen/errors.js.map +1 -1
  142. package/lib/chain/regen/index.d.ts +1 -1
  143. package/lib/chain/regen/index.js +1 -1
  144. package/lib/chain/regen/index.js.map +1 -1
  145. package/lib/chain/regen/queued.js +28 -35
  146. package/lib/chain/regen/queued.js.map +1 -1
  147. package/lib/chain/regen/regen.js +0 -1
  148. package/lib/chain/regen/regen.js.map +1 -1
  149. package/lib/chain/reprocess.js +1 -3
  150. package/lib/chain/reprocess.js.map +1 -1
  151. package/lib/chain/seenCache/index.d.ts +1 -1
  152. package/lib/chain/seenCache/index.js +1 -1
  153. package/lib/chain/seenCache/index.js.map +1 -1
  154. package/lib/chain/seenCache/seenAggregateAndProof.js +6 -7
  155. package/lib/chain/seenCache/seenAggregateAndProof.js.map +1 -1
  156. package/lib/chain/seenCache/seenAttestationData.js +2 -5
  157. package/lib/chain/seenCache/seenAttestationData.js.map +1 -1
  158. package/lib/chain/seenCache/seenAttesters.js +4 -2
  159. package/lib/chain/seenCache/seenAttesters.js.map +1 -1
  160. package/lib/chain/seenCache/seenBlockInput.d.ts +84 -0
  161. package/lib/chain/seenCache/seenBlockInput.js +225 -0
  162. package/lib/chain/seenCache/seenBlockInput.js.map +1 -0
  163. package/lib/chain/seenCache/seenBlockProposers.js +4 -2
  164. package/lib/chain/seenCache/seenBlockProposers.js.map +1 -1
  165. package/lib/chain/seenCache/seenCommittee.js +3 -1
  166. package/lib/chain/seenCache/seenCommittee.js.map +1 -1
  167. package/lib/chain/seenCache/seenCommitteeContribution.js +2 -3
  168. package/lib/chain/seenCache/seenCommitteeContribution.js.map +1 -1
  169. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +78 -74
  170. package/lib/chain/seenCache/seenGossipBlockInput.js +369 -235
  171. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  172. package/lib/chain/shufflingCache.js +2 -5
  173. package/lib/chain/shufflingCache.js.map +1 -1
  174. package/lib/chain/stateCache/blockStateCacheImpl.js +7 -13
  175. package/lib/chain/stateCache/blockStateCacheImpl.js.map +1 -1
  176. package/lib/chain/stateCache/datastore/db.js +0 -1
  177. package/lib/chain/stateCache/datastore/db.js.map +1 -1
  178. package/lib/chain/stateCache/datastore/file.js +0 -1
  179. package/lib/chain/stateCache/datastore/file.js.map +1 -1
  180. package/lib/chain/stateCache/datastore/index.d.ts +1 -1
  181. package/lib/chain/stateCache/datastore/index.js +1 -1
  182. package/lib/chain/stateCache/datastore/index.js.map +1 -1
  183. package/lib/chain/stateCache/fifoBlockStateCache.js +0 -10
  184. package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
  185. package/lib/chain/stateCache/inMemoryCheckpointsCache.js +4 -10
  186. package/lib/chain/stateCache/inMemoryCheckpointsCache.js.map +1 -1
  187. package/lib/chain/stateCache/index.d.ts +1 -1
  188. package/lib/chain/stateCache/index.js +1 -1
  189. package/lib/chain/stateCache/index.js.map +1 -1
  190. package/lib/chain/stateCache/mapMetrics.js +4 -4
  191. package/lib/chain/stateCache/mapMetrics.js.map +1 -1
  192. package/lib/chain/stateCache/persistentCheckpointsCache.js +14 -23
  193. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  194. package/lib/chain/validation/blobSidecar.d.ts +3 -8
  195. package/lib/chain/validation/blobSidecar.js +31 -73
  196. package/lib/chain/validation/blobSidecar.js.map +1 -1
  197. package/lib/chain/validation/dataColumnSidecar.d.ts +9 -7
  198. package/lib/chain/validation/dataColumnSidecar.js +57 -95
  199. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  200. package/lib/chain/validation/index.d.ts +1 -1
  201. package/lib/chain/validation/index.js +1 -1
  202. package/lib/chain/validation/index.js.map +1 -1
  203. package/lib/chain/validation/lightClientFinalityUpdate.js +3 -4
  204. package/lib/chain/validation/lightClientFinalityUpdate.js.map +1 -1
  205. package/lib/chain/validation/lightClientOptimisticUpdate.d.ts +4 -6
  206. package/lib/chain/validation/lightClientOptimisticUpdate.js +11 -11
  207. package/lib/chain/validation/lightClientOptimisticUpdate.js.map +1 -1
  208. package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts +2 -1
  209. package/lib/chain/validation/signatureSets/aggregateAndProof.js.map +1 -1
  210. package/lib/chain/validatorMonitor.d.ts +3 -1
  211. package/lib/chain/validatorMonitor.js +15 -22
  212. package/lib/chain/validatorMonitor.js.map +1 -1
  213. package/lib/db/beacon.js +0 -24
  214. package/lib/db/beacon.js.map +1 -1
  215. package/lib/db/buckets.d.ts +4 -4
  216. package/lib/db/buckets.js +4 -4
  217. package/lib/db/buckets.js.map +1 -1
  218. package/lib/db/index.d.ts +1 -1
  219. package/lib/db/index.js.map +1 -1
  220. package/lib/db/repositories/blobSidecars.js +1 -1
  221. package/lib/db/repositories/blobSidecars.js.map +1 -1
  222. package/lib/db/repositories/blobSidecarsArchive.js +1 -1
  223. package/lib/db/repositories/blobSidecarsArchive.js.map +1 -1
  224. package/lib/db/repositories/blockArchive.js +3 -2
  225. package/lib/db/repositories/blockArchive.js.map +1 -1
  226. package/lib/db/repositories/blockArchiveIndex.d.ts +2 -2
  227. package/lib/db/repositories/dataColumnSidecar.js +2 -2
  228. package/lib/db/repositories/dataColumnSidecar.js.map +1 -1
  229. package/lib/db/repositories/dataColumnSidecarArchive.js +2 -2
  230. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
  231. package/lib/db/repositories/depositDataRoot.js +0 -1
  232. package/lib/db/repositories/depositDataRoot.js.map +1 -1
  233. package/lib/db/repositories/index.d.ts +10 -10
  234. package/lib/db/repositories/index.js +9 -9
  235. package/lib/db/repositories/index.js.map +1 -1
  236. package/lib/db/single/preGenesisState.js +0 -6
  237. package/lib/db/single/preGenesisState.js.map +1 -1
  238. package/lib/db/single/preGenesisStateLastProcessedBlock.js +0 -5
  239. package/lib/db/single/preGenesisStateLastProcessedBlock.js.map +1 -1
  240. package/lib/eth1/eth1DataCache.js +0 -2
  241. package/lib/eth1/eth1DataCache.js.map +1 -1
  242. package/lib/eth1/eth1DepositDataTracker.js +5 -18
  243. package/lib/eth1/eth1DepositDataTracker.js.map +1 -1
  244. package/lib/eth1/eth1DepositsCache.js +0 -3
  245. package/lib/eth1/eth1DepositsCache.js.map +1 -1
  246. package/lib/eth1/eth1MergeBlockTracker.js +4 -10
  247. package/lib/eth1/eth1MergeBlockTracker.js.map +1 -1
  248. package/lib/eth1/index.js +0 -2
  249. package/lib/eth1/index.js.map +1 -1
  250. package/lib/eth1/provider/eth1Provider.d.ts +2 -1
  251. package/lib/eth1/provider/eth1Provider.js +2 -6
  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 +2 -16
  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 +0 -5
  258. package/lib/eth1/provider/utils.js +1 -9
  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 +0 -6
  262. package/lib/execution/builder/cache.js.map +1 -1
  263. package/lib/execution/builder/http.js +8 -14
  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 +4 -2
  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 +11 -43
  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 +0 -1
  274. package/lib/execution/engine/mock.js +12 -16
  275. package/lib/execution/engine/mock.js.map +1 -1
  276. package/lib/execution/engine/payloadIdCache.js +3 -1
  277. package/lib/execution/engine/payloadIdCache.js.map +1 -1
  278. package/lib/execution/engine/types.d.ts +1 -5
  279. package/lib/execution/engine/types.js +8 -37
  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 +5 -11
  293. package/lib/metrics/metrics/beacon.js +20 -40
  294. package/lib/metrics/metrics/beacon.js.map +1 -1
  295. package/lib/metrics/metrics/lodestar.d.ts +14 -56
  296. package/lib/metrics/metrics/lodestar.js +10 -87
  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 +6 -10
  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 +4 -1
  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 +0 -4
  312. package/lib/monitoring/properties.js.map +1 -1
  313. package/lib/monitoring/service.js +1 -13
  314. package/lib/monitoring/service.js.map +1 -1
  315. package/lib/monitoring/system.js +27 -25
  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 +50 -67
  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 +5 -14
  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 +3 -9
  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 +18 -2
  331. package/lib/network/events.js +7 -0
  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 +2 -4
  335. package/lib/network/gossip/encoding.js.map +1 -1
  336. package/lib/network/gossip/errors.js +0 -1
  337. package/lib/network/gossip/errors.js.map +1 -1
  338. package/lib/network/gossip/gossipsub.d.ts +1 -2
  339. package/lib/network/gossip/gossipsub.js +17 -43
  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 +7 -15
  346. package/lib/network/gossip/metrics.js +6 -16
  347. package/lib/network/gossip/metrics.js.map +1 -1
  348. package/lib/network/gossip/topic.d.ts +105 -125
  349. package/lib/network/gossip/topic.js +1 -2
  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 +2 -3
  355. package/lib/network/libp2p/index.js +3 -11
  356. package/lib/network/libp2p/index.js.map +1 -1
  357. package/lib/network/metadata.js +1 -6
  358. package/lib/network/metadata.js.map +1 -1
  359. package/lib/network/network.d.ts +3 -5
  360. package/lib/network/network.js +76 -92
  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 +4 -10
  366. package/lib/network/peers/datastore.js.map +1 -1
  367. package/lib/network/peers/discover.js +66 -75
  368. package/lib/network/peers/discover.js.map +1 -1
  369. package/lib/network/peers/peerManager.js +130 -154
  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 +3 -1
  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 +0 -6
  378. package/lib/network/peers/score/score.js.map +1 -1
  379. package/lib/network/peers/score/store.js +0 -3
  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 +4 -2
  383. package/lib/network/peers/utils/subnetMap.js.map +1 -1
  384. package/lib/network/processor/aggregatorTracker.js +3 -1
  385. package/lib/network/processor/aggregatorTracker.js.map +1 -1
  386. package/lib/network/processor/gossipHandlers.js +164 -145
  387. package/lib/network/processor/gossipHandlers.js.map +1 -1
  388. package/lib/network/processor/gossipQueues/indexed.js +9 -11
  389. package/lib/network/processor/gossipQueues/indexed.js.map +1 -1
  390. package/lib/network/processor/gossipQueues/linear.js +8 -9
  391. package/lib/network/processor/gossipQueues/linear.js.map +1 -1
  392. package/lib/network/processor/index.d.ts +1 -2
  393. package/lib/network/processor/index.js +8 -21
  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 +2 -11
  397. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  398. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.d.ts +28 -0
  399. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js +328 -0
  400. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js.map +1 -0
  401. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.d.ts +49 -0
  402. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js +499 -0
  403. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js.map +1 -0
  404. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -1
  405. package/lib/network/reqresp/index.d.ts +3 -1
  406. package/lib/network/reqresp/index.js +3 -1
  407. package/lib/network/reqresp/index.js.map +1 -1
  408. package/lib/network/reqresp/rateLimit.js +2 -2
  409. package/lib/network/reqresp/rateLimit.js.map +1 -1
  410. package/lib/network/reqresp/utils/dataColumnResponseValidation.js.map +1 -1
  411. package/lib/network/statusCache.js +0 -1
  412. package/lib/network/statusCache.js.map +1 -1
  413. package/lib/network/subnets/attnetsService.js +65 -73
  414. package/lib/network/subnets/attnetsService.js.map +1 -1
  415. package/lib/network/subnets/interface.js +1 -1
  416. package/lib/network/subnets/interface.js.map +1 -1
  417. package/lib/network/subnets/syncnetsService.js +22 -29
  418. package/lib/network/subnets/syncnetsService.js.map +1 -1
  419. package/lib/network/subnets/util.js +2 -1
  420. package/lib/network/subnets/util.js.map +1 -1
  421. package/lib/node/nodejs.d.ts +1 -1
  422. package/lib/node/nodejs.js +0 -15
  423. package/lib/node/nodejs.js.map +1 -1
  424. package/lib/node/notifier.js +2 -1
  425. package/lib/node/notifier.js.map +1 -1
  426. package/lib/node/options.js.map +1 -1
  427. package/lib/node/utils/interop/state.js +2 -1
  428. package/lib/node/utils/interop/state.js.map +1 -1
  429. package/lib/sync/backfill/backfill.d.ts +1 -1
  430. package/lib/sync/backfill/backfill.js +16 -58
  431. package/lib/sync/backfill/backfill.js.map +1 -1
  432. package/lib/sync/constants.d.ts +1 -2
  433. package/lib/sync/constants.js +1 -2
  434. package/lib/sync/constants.js.map +1 -1
  435. package/lib/sync/interface.d.ts +59 -1
  436. package/lib/sync/interface.js +20 -0
  437. package/lib/sync/interface.js.map +1 -1
  438. package/lib/sync/options.d.ts +1 -1
  439. package/lib/sync/range/batch.d.ts +32 -48
  440. package/lib/sync/range/batch.js +55 -201
  441. package/lib/sync/range/batch.js.map +1 -1
  442. package/lib/sync/range/chain.d.ts +10 -15
  443. package/lib/sync/range/chain.js +70 -141
  444. package/lib/sync/range/chain.js.map +1 -1
  445. package/lib/sync/range/range.d.ts +3 -3
  446. package/lib/sync/range/range.js +54 -86
  447. package/lib/sync/range/range.js.map +1 -1
  448. package/lib/sync/range/utils/hashBlocks.d.ts +2 -2
  449. package/lib/sync/range/utils/hashBlocks.js +4 -6
  450. package/lib/sync/range/utils/hashBlocks.js.map +1 -1
  451. package/lib/sync/range/utils/peerBalancer.js +13 -18
  452. package/lib/sync/range/utils/peerBalancer.js.map +1 -1
  453. package/lib/sync/sync.d.ts +2 -1
  454. package/lib/sync/sync.js +87 -95
  455. package/lib/sync/sync.js.map +1 -1
  456. package/lib/sync/unknownBlock.d.ts +29 -42
  457. package/lib/sync/unknownBlock.js +461 -405
  458. package/lib/sync/unknownBlock.js.map +1 -1
  459. package/lib/sync/utils/pendingBlocksTree.d.ts +6 -14
  460. package/lib/sync/utils/pendingBlocksTree.js +18 -24
  461. package/lib/sync/utils/pendingBlocksTree.js.map +1 -1
  462. package/lib/util/array.js +3 -7
  463. package/lib/util/array.js.map +1 -1
  464. package/lib/util/asyncIterableToEvents.js +3 -6
  465. package/lib/util/asyncIterableToEvents.js.map +1 -1
  466. package/lib/util/binarySearch.js +0 -2
  467. package/lib/util/binarySearch.js.map +1 -1
  468. package/lib/util/blobs.d.ts +2 -2
  469. package/lib/util/blobs.js +7 -9
  470. package/lib/util/blobs.js.map +1 -1
  471. package/lib/util/bufferPool.js +2 -7
  472. package/lib/util/bufferPool.js.map +1 -1
  473. package/lib/util/clock.d.ts +1 -6
  474. package/lib/util/clock.js +18 -26
  475. package/lib/util/clock.js.map +1 -1
  476. package/lib/util/dataColumns.d.ts +10 -13
  477. package/lib/util/dataColumns.js +132 -90
  478. package/lib/util/dataColumns.js.map +1 -1
  479. package/lib/util/itTrigger.js +4 -4
  480. package/lib/util/itTrigger.js.map +1 -1
  481. package/lib/util/map.js +0 -2
  482. package/lib/util/map.js.map +1 -1
  483. package/lib/util/queue/index.d.ts +1 -1
  484. package/lib/util/queue/index.js +1 -1
  485. package/lib/util/queue/index.js.map +1 -1
  486. package/lib/util/queue/itemQueue.js +49 -52
  487. package/lib/util/queue/itemQueue.js.map +1 -1
  488. package/lib/util/serializedCache.js +3 -1
  489. package/lib/util/serializedCache.js.map +1 -1
  490. package/lib/util/set.js +0 -2
  491. package/lib/util/set.js.map +1 -1
  492. package/lib/util/sszBytes.d.ts +0 -1
  493. package/lib/util/sszBytes.js +1 -1
  494. package/lib/util/sszBytes.js.map +1 -1
  495. package/lib/util/timeSeries.js +1 -3
  496. package/lib/util/timeSeries.js.map +1 -1
  497. package/lib/util/types.d.ts +1 -1
  498. package/lib/util/wrapError.d.ts +0 -7
  499. package/package.json +23 -39
  500. package/lib/api/impl/api.d.ts.map +0 -1
  501. package/lib/api/impl/beacon/blocks/index.d.ts.map +0 -1
  502. package/lib/api/impl/beacon/blocks/utils.d.ts.map +0 -1
  503. package/lib/api/impl/beacon/index.d.ts.map +0 -1
  504. package/lib/api/impl/beacon/pool/index.d.ts.map +0 -1
  505. package/lib/api/impl/beacon/rewards/index.d.ts.map +0 -1
  506. package/lib/api/impl/beacon/state/index.d.ts.map +0 -1
  507. package/lib/api/impl/beacon/state/utils.d.ts.map +0 -1
  508. package/lib/api/impl/config/constants.d.ts.map +0 -1
  509. package/lib/api/impl/config/index.d.ts.map +0 -1
  510. package/lib/api/impl/debug/index.d.ts.map +0 -1
  511. package/lib/api/impl/errors.d.ts.map +0 -1
  512. package/lib/api/impl/events/index.d.ts.map +0 -1
  513. package/lib/api/impl/index.d.ts.map +0 -1
  514. package/lib/api/impl/lightclient/index.d.ts.map +0 -1
  515. package/lib/api/impl/lodestar/index.d.ts.map +0 -1
  516. package/lib/api/impl/node/index.d.ts.map +0 -1
  517. package/lib/api/impl/node/utils.d.ts.map +0 -1
  518. package/lib/api/impl/proof/index.d.ts.map +0 -1
  519. package/lib/api/impl/types.d.ts.map +0 -1
  520. package/lib/api/impl/utils.d.ts.map +0 -1
  521. package/lib/api/impl/validator/index.d.ts.map +0 -1
  522. package/lib/api/impl/validator/utils.d.ts.map +0 -1
  523. package/lib/api/index.d.ts.map +0 -1
  524. package/lib/api/options.d.ts.map +0 -1
  525. package/lib/api/rest/activeSockets.d.ts.map +0 -1
  526. package/lib/api/rest/base.d.ts.map +0 -1
  527. package/lib/api/rest/index.d.ts.map +0 -1
  528. package/lib/api/rest/swaggerUI.d.ts.map +0 -1
  529. package/lib/bun-wrappers/prometheus-gc-stats.d.ts +0 -2
  530. package/lib/bun-wrappers/prometheus-gc-stats.d.ts.map +0 -1
  531. package/lib/bun-wrappers/prometheus-gc-stats.js +0 -8
  532. package/lib/bun-wrappers/prometheus-gc-stats.js.map +0 -1
  533. package/lib/chain/ColumnReconstructionTracker.d.ts +0 -32
  534. package/lib/chain/ColumnReconstructionTracker.d.ts.map +0 -1
  535. package/lib/chain/ColumnReconstructionTracker.js +0 -71
  536. package/lib/chain/ColumnReconstructionTracker.js.map +0 -1
  537. package/lib/chain/GetBlobsTracker.d.ts +0 -31
  538. package/lib/chain/GetBlobsTracker.d.ts.map +0 -1
  539. package/lib/chain/GetBlobsTracker.js +0 -82
  540. package/lib/chain/GetBlobsTracker.js.map +0 -1
  541. package/lib/chain/archiveStore/archiveStore.d.ts.map +0 -1
  542. package/lib/chain/archiveStore/constants.d.ts.map +0 -1
  543. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +0 -1
  544. package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts.map +0 -1
  545. package/lib/chain/archiveStore/historicalState/metrics.d.ts.map +0 -1
  546. package/lib/chain/archiveStore/historicalState/types.d.ts.map +0 -1
  547. package/lib/chain/archiveStore/historicalState/worker.d.ts.map +0 -1
  548. package/lib/chain/archiveStore/index.d.ts.map +0 -1
  549. package/lib/chain/archiveStore/interface.d.ts.map +0 -1
  550. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts.map +0 -1
  551. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +0 -1
  552. package/lib/chain/archiveStore/utils/pruneHistory.d.ts.map +0 -1
  553. package/lib/chain/archiveStore/utils/updateBackfillRange.d.ts.map +0 -1
  554. package/lib/chain/balancesCache.d.ts.map +0 -1
  555. package/lib/chain/beaconProposerCache.d.ts.map +0 -1
  556. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +0 -1
  557. package/lib/chain/blocks/blockInput/errors.d.ts.map +0 -1
  558. package/lib/chain/blocks/blockInput/index.d.ts.map +0 -1
  559. package/lib/chain/blocks/blockInput/types.d.ts.map +0 -1
  560. package/lib/chain/blocks/blockInput/utils.d.ts.map +0 -1
  561. package/lib/chain/blocks/importBlock.d.ts.map +0 -1
  562. package/lib/chain/blocks/index.d.ts.map +0 -1
  563. package/lib/chain/blocks/types.d.ts.map +0 -1
  564. package/lib/chain/blocks/utils/blowfishBanner.d.ts.map +0 -1
  565. package/lib/chain/blocks/utils/chainSegment.d.ts.map +0 -1
  566. package/lib/chain/blocks/utils/checkpoint.d.ts.map +0 -1
  567. package/lib/chain/blocks/utils/giraffeBanner.d.ts.map +0 -1
  568. package/lib/chain/blocks/utils/ownBanner.d.ts.map +0 -1
  569. package/lib/chain/blocks/utils/pandaMergeTransitionBanner.d.ts.map +0 -1
  570. package/lib/chain/blocks/utils/zebraBanner.d.ts.map +0 -1
  571. package/lib/chain/blocks/verifyBlock.d.ts.map +0 -1
  572. package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts.map +0 -1
  573. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +0 -1
  574. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +0 -1
  575. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +0 -1
  576. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +0 -1
  577. package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +0 -1
  578. package/lib/chain/bls/index.d.ts.map +0 -1
  579. package/lib/chain/bls/interface.d.ts.map +0 -1
  580. package/lib/chain/bls/maybeBatch.d.ts.map +0 -1
  581. package/lib/chain/bls/multithread/index.d.ts.map +0 -1
  582. package/lib/chain/bls/multithread/jobItem.d.ts.map +0 -1
  583. package/lib/chain/bls/multithread/poolSize.d.ts.map +0 -1
  584. package/lib/chain/bls/multithread/types.d.ts.map +0 -1
  585. package/lib/chain/bls/multithread/utils.d.ts.map +0 -1
  586. package/lib/chain/bls/multithread/worker.d.ts.map +0 -1
  587. package/lib/chain/bls/singleThread.d.ts.map +0 -1
  588. package/lib/chain/bls/utils.d.ts.map +0 -1
  589. package/lib/chain/chain.d.ts.map +0 -1
  590. package/lib/chain/emitter.d.ts.map +0 -1
  591. package/lib/chain/errors/attestationError.d.ts.map +0 -1
  592. package/lib/chain/errors/attesterSlashingError.d.ts.map +0 -1
  593. package/lib/chain/errors/blobSidecarError.d.ts.map +0 -1
  594. package/lib/chain/errors/blockError.d.ts.map +0 -1
  595. package/lib/chain/errors/blsToExecutionChangeError.d.ts.map +0 -1
  596. package/lib/chain/errors/dataColumnSidecarError.d.ts.map +0 -1
  597. package/lib/chain/errors/gossipValidation.d.ts.map +0 -1
  598. package/lib/chain/errors/index.d.ts.map +0 -1
  599. package/lib/chain/errors/lightClientError.d.ts.map +0 -1
  600. package/lib/chain/errors/proposerSlashingError.d.ts.map +0 -1
  601. package/lib/chain/errors/syncCommitteeError.d.ts.map +0 -1
  602. package/lib/chain/errors/voluntaryExitError.d.ts.map +0 -1
  603. package/lib/chain/forkChoice/index.d.ts.map +0 -1
  604. package/lib/chain/genesis/genesis.d.ts.map +0 -1
  605. package/lib/chain/genesis/interface.d.ts.map +0 -1
  606. package/lib/chain/index.d.ts.map +0 -1
  607. package/lib/chain/initState.d.ts.map +0 -1
  608. package/lib/chain/interface.d.ts.map +0 -1
  609. package/lib/chain/lightClient/index.d.ts.map +0 -1
  610. package/lib/chain/lightClient/proofs.d.ts.map +0 -1
  611. package/lib/chain/lightClient/types.d.ts.map +0 -1
  612. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +0 -1
  613. package/lib/chain/opPools/attestationPool.d.ts.map +0 -1
  614. package/lib/chain/opPools/index.d.ts.map +0 -1
  615. package/lib/chain/opPools/opPool.d.ts.map +0 -1
  616. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts.map +0 -1
  617. package/lib/chain/opPools/syncContributionAndProofPool.d.ts.map +0 -1
  618. package/lib/chain/opPools/types.d.ts.map +0 -1
  619. package/lib/chain/opPools/utils.d.ts.map +0 -1
  620. package/lib/chain/options.d.ts.map +0 -1
  621. package/lib/chain/prepareNextSlot.d.ts.map +0 -1
  622. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +0 -1
  623. package/lib/chain/produceBlock/index.d.ts.map +0 -1
  624. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +0 -1
  625. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.d.ts.map +0 -1
  626. package/lib/chain/regen/errors.d.ts.map +0 -1
  627. package/lib/chain/regen/index.d.ts.map +0 -1
  628. package/lib/chain/regen/interface.d.ts.map +0 -1
  629. package/lib/chain/regen/queued.d.ts.map +0 -1
  630. package/lib/chain/regen/regen.d.ts.map +0 -1
  631. package/lib/chain/reprocess.d.ts.map +0 -1
  632. package/lib/chain/rewards/attestationsRewards.d.ts.map +0 -1
  633. package/lib/chain/rewards/blockRewards.d.ts.map +0 -1
  634. package/lib/chain/rewards/syncCommitteeRewards.d.ts.map +0 -1
  635. package/lib/chain/seenCache/index.d.ts.map +0 -1
  636. package/lib/chain/seenCache/seenAggregateAndProof.d.ts.map +0 -1
  637. package/lib/chain/seenCache/seenAttestationData.d.ts.map +0 -1
  638. package/lib/chain/seenCache/seenAttesters.d.ts.map +0 -1
  639. package/lib/chain/seenCache/seenBlockAttesters.d.ts.map +0 -1
  640. package/lib/chain/seenCache/seenBlockProposers.d.ts.map +0 -1
  641. package/lib/chain/seenCache/seenCommittee.d.ts.map +0 -1
  642. package/lib/chain/seenCache/seenCommitteeContribution.d.ts.map +0 -1
  643. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +0 -1
  644. package/lib/chain/serializeState.d.ts.map +0 -1
  645. package/lib/chain/shufflingCache.d.ts.map +0 -1
  646. package/lib/chain/stateCache/blockStateCacheImpl.d.ts.map +0 -1
  647. package/lib/chain/stateCache/datastore/db.d.ts.map +0 -1
  648. package/lib/chain/stateCache/datastore/file.d.ts.map +0 -1
  649. package/lib/chain/stateCache/datastore/index.d.ts.map +0 -1
  650. package/lib/chain/stateCache/datastore/types.d.ts.map +0 -1
  651. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +0 -1
  652. package/lib/chain/stateCache/inMemoryCheckpointsCache.d.ts.map +0 -1
  653. package/lib/chain/stateCache/index.d.ts.map +0 -1
  654. package/lib/chain/stateCache/mapMetrics.d.ts.map +0 -1
  655. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +0 -1
  656. package/lib/chain/stateCache/types.d.ts.map +0 -1
  657. package/lib/chain/validation/aggregateAndProof.d.ts.map +0 -1
  658. package/lib/chain/validation/attestation.d.ts.map +0 -1
  659. package/lib/chain/validation/attesterSlashing.d.ts.map +0 -1
  660. package/lib/chain/validation/blobSidecar.d.ts.map +0 -1
  661. package/lib/chain/validation/block.d.ts.map +0 -1
  662. package/lib/chain/validation/blsToExecutionChange.d.ts.map +0 -1
  663. package/lib/chain/validation/dataColumnSidecar.d.ts.map +0 -1
  664. package/lib/chain/validation/index.d.ts.map +0 -1
  665. package/lib/chain/validation/lightClientFinalityUpdate.d.ts.map +0 -1
  666. package/lib/chain/validation/lightClientOptimisticUpdate.d.ts.map +0 -1
  667. package/lib/chain/validation/proposerSlashing.d.ts.map +0 -1
  668. package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts.map +0 -1
  669. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +0 -1
  670. package/lib/chain/validation/signatureSets/index.d.ts.map +0 -1
  671. package/lib/chain/validation/signatureSets/selectionProof.d.ts.map +0 -1
  672. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +0 -1
  673. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +0 -1
  674. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +0 -1
  675. package/lib/chain/validation/syncCommittee.d.ts.map +0 -1
  676. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +0 -1
  677. package/lib/chain/validation/voluntaryExit.d.ts.map +0 -1
  678. package/lib/chain/validatorMonitor.d.ts.map +0 -1
  679. package/lib/constants/constants.d.ts.map +0 -1
  680. package/lib/constants/index.d.ts.map +0 -1
  681. package/lib/constants/network.d.ts.map +0 -1
  682. package/lib/db/beacon.d.ts.map +0 -1
  683. package/lib/db/buckets.d.ts.map +0 -1
  684. package/lib/db/index.d.ts.map +0 -1
  685. package/lib/db/interface.d.ts.map +0 -1
  686. package/lib/db/options.d.ts.map +0 -1
  687. package/lib/db/repositories/attesterSlashing.d.ts.map +0 -1
  688. package/lib/db/repositories/backfilledRanges.d.ts.map +0 -1
  689. package/lib/db/repositories/blobSidecars.d.ts.map +0 -1
  690. package/lib/db/repositories/blobSidecarsArchive.d.ts.map +0 -1
  691. package/lib/db/repositories/block.d.ts.map +0 -1
  692. package/lib/db/repositories/blockArchive.d.ts.map +0 -1
  693. package/lib/db/repositories/blockArchiveIndex.d.ts.map +0 -1
  694. package/lib/db/repositories/blsToExecutionChange.d.ts.map +0 -1
  695. package/lib/db/repositories/checkpointState.d.ts.map +0 -1
  696. package/lib/db/repositories/dataColumnSidecar.d.ts.map +0 -1
  697. package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +0 -1
  698. package/lib/db/repositories/depositDataRoot.d.ts.map +0 -1
  699. package/lib/db/repositories/depositEvent.d.ts.map +0 -1
  700. package/lib/db/repositories/eth1Data.d.ts.map +0 -1
  701. package/lib/db/repositories/index.d.ts.map +0 -1
  702. package/lib/db/repositories/lightclientBestUpdate.d.ts.map +0 -1
  703. package/lib/db/repositories/lightclientCheckpointHeader.d.ts.map +0 -1
  704. package/lib/db/repositories/lightclientSyncCommittee.d.ts.map +0 -1
  705. package/lib/db/repositories/lightclientSyncCommitteeWitness.d.ts.map +0 -1
  706. package/lib/db/repositories/proposerSlashing.d.ts.map +0 -1
  707. package/lib/db/repositories/stateArchive.d.ts.map +0 -1
  708. package/lib/db/repositories/stateArchiveIndex.d.ts.map +0 -1
  709. package/lib/db/repositories/voluntaryExit.d.ts.map +0 -1
  710. package/lib/db/single/index.d.ts.map +0 -1
  711. package/lib/db/single/preGenesisState.d.ts.map +0 -1
  712. package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts.map +0 -1
  713. package/lib/eth1/errors.d.ts.map +0 -1
  714. package/lib/eth1/eth1DataCache.d.ts.map +0 -1
  715. package/lib/eth1/eth1DepositDataTracker.d.ts.map +0 -1
  716. package/lib/eth1/eth1DepositsCache.d.ts.map +0 -1
  717. package/lib/eth1/eth1MergeBlockTracker.d.ts.map +0 -1
  718. package/lib/eth1/index.d.ts.map +0 -1
  719. package/lib/eth1/interface.d.ts.map +0 -1
  720. package/lib/eth1/options.d.ts.map +0 -1
  721. package/lib/eth1/provider/eth1Provider.d.ts.map +0 -1
  722. package/lib/eth1/provider/jsonRpcHttpClient.d.ts.map +0 -1
  723. package/lib/eth1/provider/jwt.d.ts.map +0 -1
  724. package/lib/eth1/provider/utils.d.ts.map +0 -1
  725. package/lib/eth1/stream.d.ts.map +0 -1
  726. package/lib/eth1/utils/depositContract.d.ts.map +0 -1
  727. package/lib/eth1/utils/deposits.d.ts.map +0 -1
  728. package/lib/eth1/utils/eth1Data.d.ts.map +0 -1
  729. package/lib/eth1/utils/eth1DepositEvent.d.ts.map +0 -1
  730. package/lib/eth1/utils/eth1Vote.d.ts.map +0 -1
  731. package/lib/eth1/utils/groupDepositEventsByBlock.d.ts.map +0 -1
  732. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts.map +0 -1
  733. package/lib/execution/builder/cache.d.ts.map +0 -1
  734. package/lib/execution/builder/http.d.ts.map +0 -1
  735. package/lib/execution/builder/index.d.ts.map +0 -1
  736. package/lib/execution/builder/interface.d.ts.map +0 -1
  737. package/lib/execution/builder/utils.d.ts.map +0 -1
  738. package/lib/execution/engine/disabled.d.ts.map +0 -1
  739. package/lib/execution/engine/http.d.ts.map +0 -1
  740. package/lib/execution/engine/index.d.ts.map +0 -1
  741. package/lib/execution/engine/interface.d.ts.map +0 -1
  742. package/lib/execution/engine/mock.d.ts.map +0 -1
  743. package/lib/execution/engine/payloadIdCache.d.ts.map +0 -1
  744. package/lib/execution/engine/types.d.ts.map +0 -1
  745. package/lib/execution/engine/utils.d.ts.map +0 -1
  746. package/lib/execution/index.d.ts.map +0 -1
  747. package/lib/index.d.ts.map +0 -1
  748. package/lib/metrics/index.d.ts.map +0 -1
  749. package/lib/metrics/metrics/beacon.d.ts.map +0 -1
  750. package/lib/metrics/metrics/lodestar.d.ts.map +0 -1
  751. package/lib/metrics/metrics.d.ts.map +0 -1
  752. package/lib/metrics/nodeJsMetrics.d.ts.map +0 -1
  753. package/lib/metrics/options.d.ts.map +0 -1
  754. package/lib/metrics/server/http.d.ts.map +0 -1
  755. package/lib/metrics/server/index.d.ts.map +0 -1
  756. package/lib/metrics/utils/avgMinMax.d.ts.map +0 -1
  757. package/lib/metrics/utils/gauge.d.ts.map +0 -1
  758. package/lib/metrics/utils/registryMetricCreator.d.ts.map +0 -1
  759. package/lib/monitoring/clientStats.d.ts.map +0 -1
  760. package/lib/monitoring/index.d.ts.map +0 -1
  761. package/lib/monitoring/options.d.ts.map +0 -1
  762. package/lib/monitoring/properties.d.ts.map +0 -1
  763. package/lib/monitoring/service.d.ts.map +0 -1
  764. package/lib/monitoring/system.d.ts.map +0 -1
  765. package/lib/monitoring/types.d.ts.map +0 -1
  766. package/lib/network/core/events.d.ts.map +0 -1
  767. package/lib/network/core/index.d.ts.map +0 -1
  768. package/lib/network/core/metrics.d.ts.map +0 -1
  769. package/lib/network/core/networkCore.d.ts.map +0 -1
  770. package/lib/network/core/networkCoreWorker.d.ts.map +0 -1
  771. package/lib/network/core/networkCoreWorkerHandler.d.ts.map +0 -1
  772. package/lib/network/core/types.d.ts.map +0 -1
  773. package/lib/network/discv5/index.d.ts.map +0 -1
  774. package/lib/network/discv5/types.d.ts.map +0 -1
  775. package/lib/network/discv5/utils.d.ts.map +0 -1
  776. package/lib/network/discv5/worker.d.ts.map +0 -1
  777. package/lib/network/events.d.ts.map +0 -1
  778. package/lib/network/forks.d.ts.map +0 -1
  779. package/lib/network/gossip/constants.d.ts.map +0 -1
  780. package/lib/network/gossip/encoding.d.ts.map +0 -1
  781. package/lib/network/gossip/errors.d.ts.map +0 -1
  782. package/lib/network/gossip/gossipsub.d.ts.map +0 -1
  783. package/lib/network/gossip/index.d.ts.map +0 -1
  784. package/lib/network/gossip/interface.d.ts.map +0 -1
  785. package/lib/network/gossip/metrics.d.ts.map +0 -1
  786. package/lib/network/gossip/scoringParameters.d.ts.map +0 -1
  787. package/lib/network/gossip/topic.d.ts.map +0 -1
  788. package/lib/network/index.d.ts.map +0 -1
  789. package/lib/network/interface.d.ts.map +0 -1
  790. package/lib/network/libp2p/error.d.ts.map +0 -1
  791. package/lib/network/libp2p/index.d.ts.map +0 -1
  792. package/lib/network/metadata.d.ts.map +0 -1
  793. package/lib/network/network.d.ts.map +0 -1
  794. package/lib/network/networkConfig.d.ts.map +0 -1
  795. package/lib/network/options.d.ts.map +0 -1
  796. package/lib/network/peers/client.d.ts.map +0 -1
  797. package/lib/network/peers/datastore.d.ts.map +0 -1
  798. package/lib/network/peers/discover.d.ts.map +0 -1
  799. package/lib/network/peers/index.d.ts.map +0 -1
  800. package/lib/network/peers/peerManager.d.ts.map +0 -1
  801. package/lib/network/peers/peersData.d.ts.map +0 -1
  802. package/lib/network/peers/score/constants.d.ts.map +0 -1
  803. package/lib/network/peers/score/index.d.ts.map +0 -1
  804. package/lib/network/peers/score/interface.d.ts.map +0 -1
  805. package/lib/network/peers/score/score.d.ts.map +0 -1
  806. package/lib/network/peers/score/store.d.ts.map +0 -1
  807. package/lib/network/peers/score/utils.d.ts.map +0 -1
  808. package/lib/network/peers/utils/assertPeerRelevance.d.ts.map +0 -1
  809. package/lib/network/peers/utils/enrSubnetsDeserialize.d.ts.map +0 -1
  810. package/lib/network/peers/utils/getConnectedPeerIds.d.ts.map +0 -1
  811. package/lib/network/peers/utils/index.d.ts.map +0 -1
  812. package/lib/network/peers/utils/prioritizePeers.d.ts.map +0 -1
  813. package/lib/network/peers/utils/subnetMap.d.ts.map +0 -1
  814. package/lib/network/processor/aggregatorTracker.d.ts.map +0 -1
  815. package/lib/network/processor/extractSlotRootFns.d.ts.map +0 -1
  816. package/lib/network/processor/gossipHandlers.d.ts.map +0 -1
  817. package/lib/network/processor/gossipQueues/index.d.ts.map +0 -1
  818. package/lib/network/processor/gossipQueues/indexed.d.ts.map +0 -1
  819. package/lib/network/processor/gossipQueues/linear.d.ts.map +0 -1
  820. package/lib/network/processor/gossipQueues/types.d.ts.map +0 -1
  821. package/lib/network/processor/gossipValidatorFn.d.ts.map +0 -1
  822. package/lib/network/processor/index.d.ts.map +0 -1
  823. package/lib/network/processor/types.d.ts.map +0 -1
  824. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +0 -1
  825. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +0 -1
  826. package/lib/network/reqresp/handlers/beaconBlocksByRoot.d.ts.map +0 -1
  827. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +0 -1
  828. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts.map +0 -1
  829. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +0 -1
  830. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.d.ts.map +0 -1
  831. package/lib/network/reqresp/handlers/index.d.ts.map +0 -1
  832. package/lib/network/reqresp/handlers/lightClientBootstrap.d.ts.map +0 -1
  833. package/lib/network/reqresp/handlers/lightClientFinalityUpdate.d.ts.map +0 -1
  834. package/lib/network/reqresp/handlers/lightClientOptimisticUpdate.d.ts.map +0 -1
  835. package/lib/network/reqresp/handlers/lightClientUpdatesByRange.d.ts.map +0 -1
  836. package/lib/network/reqresp/index.d.ts.map +0 -1
  837. package/lib/network/reqresp/interface.d.ts.map +0 -1
  838. package/lib/network/reqresp/protocols.d.ts.map +0 -1
  839. package/lib/network/reqresp/rateLimit.d.ts.map +0 -1
  840. package/lib/network/reqresp/score.d.ts.map +0 -1
  841. package/lib/network/reqresp/types.d.ts.map +0 -1
  842. package/lib/network/reqresp/utils/collect.d.ts.map +0 -1
  843. package/lib/network/reqresp/utils/collectSequentialBlocksInRange.d.ts.map +0 -1
  844. package/lib/network/reqresp/utils/dataColumnResponseValidation.d.ts.map +0 -1
  845. package/lib/network/statusCache.d.ts.map +0 -1
  846. package/lib/network/subnets/attnetsService.d.ts.map +0 -1
  847. package/lib/network/subnets/index.d.ts.map +0 -1
  848. package/lib/network/subnets/interface.d.ts.map +0 -1
  849. package/lib/network/subnets/syncnetsService.d.ts.map +0 -1
  850. package/lib/network/subnets/util.d.ts.map +0 -1
  851. package/lib/network/util.d.ts.map +0 -1
  852. package/lib/node/index.d.ts.map +0 -1
  853. package/lib/node/nodejs.d.ts.map +0 -1
  854. package/lib/node/notifier.d.ts.map +0 -1
  855. package/lib/node/options.d.ts.map +0 -1
  856. package/lib/node/utils/interop/deposits.d.ts.map +0 -1
  857. package/lib/node/utils/interop/state.d.ts.map +0 -1
  858. package/lib/node/utils/lightclient.d.ts.map +0 -1
  859. package/lib/node/utils/state.d.ts.map +0 -1
  860. package/lib/sync/backfill/backfill.d.ts.map +0 -1
  861. package/lib/sync/backfill/errors.d.ts.map +0 -1
  862. package/lib/sync/backfill/index.d.ts.map +0 -1
  863. package/lib/sync/backfill/verify.d.ts.map +0 -1
  864. package/lib/sync/constants.d.ts.map +0 -1
  865. package/lib/sync/index.d.ts.map +0 -1
  866. package/lib/sync/interface.d.ts.map +0 -1
  867. package/lib/sync/options.d.ts.map +0 -1
  868. package/lib/sync/range/batch.d.ts.map +0 -1
  869. package/lib/sync/range/chain.d.ts.map +0 -1
  870. package/lib/sync/range/range.d.ts.map +0 -1
  871. package/lib/sync/range/utils/batches.d.ts.map +0 -1
  872. package/lib/sync/range/utils/chainTarget.d.ts.map +0 -1
  873. package/lib/sync/range/utils/hashBlocks.d.ts.map +0 -1
  874. package/lib/sync/range/utils/index.d.ts.map +0 -1
  875. package/lib/sync/range/utils/peerBalancer.d.ts.map +0 -1
  876. package/lib/sync/range/utils/updateChains.d.ts.map +0 -1
  877. package/lib/sync/sync.d.ts.map +0 -1
  878. package/lib/sync/types.d.ts +0 -43
  879. package/lib/sync/types.d.ts.map +0 -1
  880. package/lib/sync/types.js +0 -34
  881. package/lib/sync/types.js.map +0 -1
  882. package/lib/sync/unknownBlock.d.ts.map +0 -1
  883. package/lib/sync/utils/downloadByRange.d.ts +0 -186
  884. package/lib/sync/utils/downloadByRange.d.ts.map +0 -1
  885. package/lib/sync/utils/downloadByRange.js +0 -457
  886. package/lib/sync/utils/downloadByRange.js.map +0 -1
  887. package/lib/sync/utils/downloadByRoot.d.ts +0 -121
  888. package/lib/sync/utils/downloadByRoot.d.ts.map +0 -1
  889. package/lib/sync/utils/downloadByRoot.js +0 -346
  890. package/lib/sync/utils/downloadByRoot.js.map +0 -1
  891. package/lib/sync/utils/pendingBlocksTree.d.ts.map +0 -1
  892. package/lib/sync/utils/remoteSyncType.d.ts.map +0 -1
  893. package/lib/util/address.d.ts.map +0 -1
  894. package/lib/util/array.d.ts.map +0 -1
  895. package/lib/util/asyncIterableToEvents.d.ts.map +0 -1
  896. package/lib/util/binarySearch.d.ts.map +0 -1
  897. package/lib/util/bitArray.d.ts.map +0 -1
  898. package/lib/util/blobs.d.ts.map +0 -1
  899. package/lib/util/bufferPool.d.ts.map +0 -1
  900. package/lib/util/bytes.d.ts.map +0 -1
  901. package/lib/util/chunkify.d.ts.map +0 -1
  902. package/lib/util/clock.d.ts.map +0 -1
  903. package/lib/util/dataColumns.d.ts.map +0 -1
  904. package/lib/util/dependentRoot.d.ts.map +0 -1
  905. package/lib/util/enum.d.ts.map +0 -1
  906. package/lib/util/error.d.ts.map +0 -1
  907. package/lib/util/eventLoop.d.ts.map +0 -1
  908. package/lib/util/execution.d.ts +0 -20
  909. package/lib/util/execution.d.ts.map +0 -1
  910. package/lib/util/execution.js +0 -165
  911. package/lib/util/execution.js.map +0 -1
  912. package/lib/util/file.d.ts.map +0 -1
  913. package/lib/util/forkChoice.d.ts.map +0 -1
  914. package/lib/util/forkName.d.ts.map +0 -1
  915. package/lib/util/graffiti.d.ts.map +0 -1
  916. package/lib/util/hex.d.ts.map +0 -1
  917. package/lib/util/index.d.ts.map +0 -1
  918. package/lib/util/ip.d.ts.map +0 -1
  919. package/lib/util/itTrigger.d.ts.map +0 -1
  920. package/lib/util/kzg.d.ts.map +0 -1
  921. package/lib/util/map.d.ts.map +0 -1
  922. package/lib/util/metadata.d.ts.map +0 -1
  923. package/lib/util/multifork.d.ts.map +0 -1
  924. package/lib/util/numpy.d.ts.map +0 -1
  925. package/lib/util/peerId.d.ts.map +0 -1
  926. package/lib/util/profile.d.ts.map +0 -1
  927. package/lib/util/promises.d.ts.map +0 -1
  928. package/lib/util/queue/errors.d.ts.map +0 -1
  929. package/lib/util/queue/fnQueue.d.ts.map +0 -1
  930. package/lib/util/queue/index.d.ts.map +0 -1
  931. package/lib/util/queue/itemQueue.d.ts.map +0 -1
  932. package/lib/util/queue/options.d.ts.map +0 -1
  933. package/lib/util/serializedCache.d.ts.map +0 -1
  934. package/lib/util/set.d.ts.map +0 -1
  935. package/lib/util/shuffle.d.ts.map +0 -1
  936. package/lib/util/sortBy.d.ts.map +0 -1
  937. package/lib/util/sszBytes.d.ts.map +0 -1
  938. package/lib/util/strictEvents.d.ts.map +0 -1
  939. package/lib/util/time.d.ts.map +0 -1
  940. package/lib/util/timeSeries.d.ts.map +0 -1
  941. package/lib/util/types.d.ts.map +0 -1
  942. package/lib/util/workerEvents.d.ts.map +0 -1
  943. package/lib/util/wrapError.d.ts.map +0 -1
  944. package/src/api/impl/api.ts +0 -26
  945. package/src/api/impl/beacon/blocks/index.ts +0 -744
  946. package/src/api/impl/beacon/blocks/utils.ts +0 -75
  947. package/src/api/impl/beacon/index.ts +0 -35
  948. package/src/api/impl/beacon/pool/index.ts +0 -314
  949. package/src/api/impl/beacon/rewards/index.ts +0 -30
  950. package/src/api/impl/beacon/state/index.ts +0 -406
  951. package/src/api/impl/beacon/state/utils.ts +0 -189
  952. package/src/api/impl/config/constants.ts +0 -127
  953. package/src/api/impl/config/index.ts +0 -59
  954. package/src/api/impl/debug/index.ts +0 -131
  955. package/src/api/impl/errors.ts +0 -50
  956. package/src/api/impl/events/index.ts +0 -33
  957. package/src/api/impl/index.ts +0 -6
  958. package/src/api/impl/lightclient/index.ts +0 -64
  959. package/src/api/impl/lodestar/index.ts +0 -257
  960. package/src/api/impl/node/index.ts +0 -88
  961. package/src/api/impl/node/utils.ts +0 -51
  962. package/src/api/impl/proof/index.ts +0 -60
  963. package/src/api/impl/types.ts +0 -17
  964. package/src/api/impl/utils.ts +0 -25
  965. package/src/api/impl/validator/index.ts +0 -1540
  966. package/src/api/impl/validator/utils.ts +0 -85
  967. package/src/api/index.ts +0 -2
  968. package/src/api/options.ts +0 -16
  969. package/src/api/rest/activeSockets.ts +0 -109
  970. package/src/api/rest/base.ts +0 -216
  971. package/src/api/rest/index.ts +0 -63
  972. package/src/api/rest/swaggerUI.ts +0 -80
  973. package/src/bun-wrappers/prometheus-gc-stats.ts +0 -7
  974. package/src/chain/ColumnReconstructionTracker.ts +0 -90
  975. package/src/chain/GetBlobsTracker.ts +0 -115
  976. package/src/chain/archiveStore/archiveStore.ts +0 -222
  977. package/src/chain/archiveStore/constants.ts +0 -5
  978. package/src/chain/archiveStore/historicalState/getHistoricalState.ts +0 -116
  979. package/src/chain/archiveStore/historicalState/historicalStateRegen.ts +0 -68
  980. package/src/chain/archiveStore/historicalState/metrics.ts +0 -214
  981. package/src/chain/archiveStore/historicalState/types.ts +0 -41
  982. package/src/chain/archiveStore/historicalState/worker.ts +0 -77
  983. package/src/chain/archiveStore/index.ts +0 -3
  984. package/src/chain/archiveStore/interface.ts +0 -75
  985. package/src/chain/archiveStore/strategies/frequencyStateArchiveStrategy.ts +0 -138
  986. package/src/chain/archiveStore/utils/archiveBlocks.ts +0 -437
  987. package/src/chain/archiveStore/utils/pruneHistory.ts +0 -56
  988. package/src/chain/archiveStore/utils/updateBackfillRange.ts +0 -50
  989. package/src/chain/balancesCache.ts +0 -52
  990. package/src/chain/beaconProposerCache.ts +0 -43
  991. package/src/chain/blocks/blockInput/blockInput.ts +0 -852
  992. package/src/chain/blocks/blockInput/errors.ts +0 -48
  993. package/src/chain/blocks/blockInput/index.ts +0 -4
  994. package/src/chain/blocks/blockInput/types.ts +0 -145
  995. package/src/chain/blocks/blockInput/utils.ts +0 -21
  996. package/src/chain/blocks/importBlock.ts +0 -597
  997. package/src/chain/blocks/index.ts +0 -179
  998. package/src/chain/blocks/types.ts +0 -101
  999. package/src/chain/blocks/utils/blowfishBanner.ts +0 -28
  1000. package/src/chain/blocks/utils/chainSegment.ts +0 -29
  1001. package/src/chain/blocks/utils/checkpoint.ts +0 -25
  1002. package/src/chain/blocks/utils/giraffeBanner.ts +0 -30
  1003. package/src/chain/blocks/utils/ownBanner.ts +0 -20
  1004. package/src/chain/blocks/utils/pandaMergeTransitionBanner.ts +0 -43
  1005. package/src/chain/blocks/utils/zebraBanner.ts +0 -45
  1006. package/src/chain/blocks/verifyBlock.ts +0 -242
  1007. package/src/chain/blocks/verifyBlocksDataAvailability.ts +0 -42
  1008. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +0 -438
  1009. package/src/chain/blocks/verifyBlocksSanityChecks.ts +0 -129
  1010. package/src/chain/blocks/verifyBlocksSignatures.ts +0 -105
  1011. package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +0 -114
  1012. package/src/chain/blocks/writeBlockInputToDb.ts +0 -120
  1013. package/src/chain/bls/index.ts +0 -4
  1014. package/src/chain/bls/interface.ts +0 -68
  1015. package/src/chain/bls/maybeBatch.ts +0 -45
  1016. package/src/chain/bls/multithread/index.ts +0 -582
  1017. package/src/chain/bls/multithread/jobItem.ts +0 -119
  1018. package/src/chain/bls/multithread/poolSize.ts +0 -16
  1019. package/src/chain/bls/multithread/types.ts +0 -38
  1020. package/src/chain/bls/multithread/utils.ts +0 -19
  1021. package/src/chain/bls/multithread/worker.ts +0 -114
  1022. package/src/chain/bls/singleThread.ts +0 -87
  1023. package/src/chain/bls/utils.ts +0 -30
  1024. package/src/chain/chain.ts +0 -1354
  1025. package/src/chain/emitter.ts +0 -113
  1026. package/src/chain/errors/attestationError.ts +0 -194
  1027. package/src/chain/errors/attesterSlashingError.ts +0 -11
  1028. package/src/chain/errors/blobSidecarError.ts +0 -60
  1029. package/src/chain/errors/blockError.ts +0 -166
  1030. package/src/chain/errors/blsToExecutionChangeError.ts +0 -13
  1031. package/src/chain/errors/dataColumnSidecarError.ts +0 -80
  1032. package/src/chain/errors/gossipValidation.ts +0 -20
  1033. package/src/chain/errors/index.ts +0 -10
  1034. package/src/chain/errors/lightClientError.ts +0 -30
  1035. package/src/chain/errors/proposerSlashingError.ts +0 -11
  1036. package/src/chain/errors/syncCommitteeError.ts +0 -36
  1037. package/src/chain/errors/voluntaryExitError.ts +0 -13
  1038. package/src/chain/forkChoice/index.ts +0 -112
  1039. package/src/chain/genesis/genesis.ts +0 -190
  1040. package/src/chain/genesis/interface.ts +0 -14
  1041. package/src/chain/index.ts +0 -6
  1042. package/src/chain/initState.ts +0 -221
  1043. package/src/chain/interface.ts +0 -280
  1044. package/src/chain/lightClient/index.ts +0 -764
  1045. package/src/chain/lightClient/proofs.ts +0 -85
  1046. package/src/chain/lightClient/types.ts +0 -33
  1047. package/src/chain/opPools/aggregatedAttestationPool.ts +0 -1063
  1048. package/src/chain/opPools/attestationPool.ts +0 -282
  1049. package/src/chain/opPools/index.ts +0 -5
  1050. package/src/chain/opPools/opPool.ts +0 -462
  1051. package/src/chain/opPools/syncCommitteeMessagePool.ts +0 -169
  1052. package/src/chain/opPools/syncContributionAndProofPool.ts +0 -240
  1053. package/src/chain/opPools/types.ts +0 -35
  1054. package/src/chain/opPools/utils.ts +0 -65
  1055. package/src/chain/options.ts +0 -138
  1056. package/src/chain/prepareNextSlot.ts +0 -277
  1057. package/src/chain/produceBlock/computeNewStateRoot.ts +0 -55
  1058. package/src/chain/produceBlock/index.ts +0 -2
  1059. package/src/chain/produceBlock/produceBlockBody.ts +0 -797
  1060. package/src/chain/produceBlock/validateBlobsAndKzgCommitments.ts +0 -54
  1061. package/src/chain/regen/errors.ts +0 -30
  1062. package/src/chain/regen/index.ts +0 -4
  1063. package/src/chain/regen/interface.ts +0 -93
  1064. package/src/chain/regen/queued.ts +0 -317
  1065. package/src/chain/regen/regen.ts +0 -424
  1066. package/src/chain/reprocess.ts +0 -161
  1067. package/src/chain/rewards/attestationsRewards.ts +0 -196
  1068. package/src/chain/rewards/blockRewards.ts +0 -150
  1069. package/src/chain/rewards/syncCommitteeRewards.ts +0 -58
  1070. package/src/chain/seenCache/index.ts +0 -5
  1071. package/src/chain/seenCache/seenAggregateAndProof.ts +0 -120
  1072. package/src/chain/seenCache/seenAttestationData.ts +0 -145
  1073. package/src/chain/seenCache/seenAttesters.ts +0 -58
  1074. package/src/chain/seenCache/seenBlockAttesters.ts +0 -18
  1075. package/src/chain/seenCache/seenBlockProposers.ts +0 -48
  1076. package/src/chain/seenCache/seenCommittee.ts +0 -43
  1077. package/src/chain/seenCache/seenCommitteeContribution.ts +0 -104
  1078. package/src/chain/seenCache/seenGossipBlockInput.ts +0 -373
  1079. package/src/chain/serializeState.ts +0 -32
  1080. package/src/chain/shufflingCache.ts +0 -238
  1081. package/src/chain/stateCache/blockStateCacheImpl.ts +0 -150
  1082. package/src/chain/stateCache/datastore/db.ts +0 -36
  1083. package/src/chain/stateCache/datastore/file.ts +0 -53
  1084. package/src/chain/stateCache/datastore/index.ts +0 -2
  1085. package/src/chain/stateCache/datastore/types.ts +0 -13
  1086. package/src/chain/stateCache/fifoBlockStateCache.ts +0 -208
  1087. package/src/chain/stateCache/inMemoryCheckpointsCache.ts +0 -198
  1088. package/src/chain/stateCache/index.ts +0 -3
  1089. package/src/chain/stateCache/mapMetrics.ts +0 -52
  1090. package/src/chain/stateCache/persistentCheckpointsCache.ts +0 -837
  1091. package/src/chain/stateCache/types.ts +0 -86
  1092. package/src/chain/validation/aggregateAndProof.ts +0 -258
  1093. package/src/chain/validation/attestation.ts +0 -885
  1094. package/src/chain/validation/attesterSlashing.ts +0 -61
  1095. package/src/chain/validation/blobSidecar.ts +0 -301
  1096. package/src/chain/validation/block.ts +0 -188
  1097. package/src/chain/validation/blsToExecutionChange.ts +0 -61
  1098. package/src/chain/validation/dataColumnSidecar.ts +0 -381
  1099. package/src/chain/validation/index.ts +0 -9
  1100. package/src/chain/validation/lightClientFinalityUpdate.ts +0 -46
  1101. package/src/chain/validation/lightClientOptimisticUpdate.ts +0 -68
  1102. package/src/chain/validation/proposerSlashing.ts +0 -54
  1103. package/src/chain/validation/signatureSets/aggregateAndProof.ts +0 -38
  1104. package/src/chain/validation/signatureSets/contributionAndProof.ts +0 -27
  1105. package/src/chain/validation/signatureSets/index.ts +0 -6
  1106. package/src/chain/validation/signatureSets/selectionProof.ts +0 -27
  1107. package/src/chain/validation/signatureSets/syncCommittee.ts +0 -22
  1108. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +0 -18
  1109. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +0 -27
  1110. package/src/chain/validation/syncCommittee.ts +0 -165
  1111. package/src/chain/validation/syncCommitteeContributionAndProof.ts +0 -122
  1112. package/src/chain/validation/voluntaryExit.ts +0 -58
  1113. package/src/chain/validatorMonitor.ts +0 -1309
  1114. package/src/constants/constants.ts +0 -15
  1115. package/src/constants/index.ts +0 -2
  1116. package/src/constants/network.ts +0 -52
  1117. package/src/db/beacon.ts +0 -113
  1118. package/src/db/buckets.ts +0 -80
  1119. package/src/db/index.ts +0 -2
  1120. package/src/db/interface.ts +0 -76
  1121. package/src/db/options.ts +0 -7
  1122. package/src/db/repositories/attesterSlashing.ts +0 -38
  1123. package/src/db/repositories/backfilledRanges.ts +0 -29
  1124. package/src/db/repositories/blobSidecars.ts +0 -37
  1125. package/src/db/repositories/blobSidecarsArchive.ts +0 -28
  1126. package/src/db/repositories/block.ts +0 -33
  1127. package/src/db/repositories/blockArchive.ts +0 -170
  1128. package/src/db/repositories/blockArchiveIndex.ts +0 -45
  1129. package/src/db/repositories/blsToExecutionChange.ts +0 -16
  1130. package/src/db/repositories/checkpointState.ts +0 -31
  1131. package/src/db/repositories/dataColumnSidecar.ts +0 -49
  1132. package/src/db/repositories/dataColumnSidecarArchive.ts +0 -56
  1133. package/src/db/repositories/depositDataRoot.ts +0 -80
  1134. package/src/db/repositories/depositEvent.ts +0 -32
  1135. package/src/db/repositories/eth1Data.ts +0 -33
  1136. package/src/db/repositories/index.ts +0 -20
  1137. package/src/db/repositories/lightclientBestUpdate.ts +0 -41
  1138. package/src/db/repositories/lightclientCheckpointHeader.ts +0 -32
  1139. package/src/db/repositories/lightclientSyncCommittee.ts +0 -16
  1140. package/src/db/repositories/lightclientSyncCommitteeWitness.ts +0 -77
  1141. package/src/db/repositories/proposerSlashing.ts +0 -15
  1142. package/src/db/repositories/stateArchive.ts +0 -69
  1143. package/src/db/repositories/stateArchiveIndex.ts +0 -18
  1144. package/src/db/repositories/voluntaryExit.ts +0 -15
  1145. package/src/db/single/index.ts +0 -2
  1146. package/src/db/single/preGenesisState.ts +0 -37
  1147. package/src/db/single/preGenesisStateLastProcessedBlock.ts +0 -34
  1148. package/src/eth1/errors.ts +0 -40
  1149. package/src/eth1/eth1DataCache.ts +0 -26
  1150. package/src/eth1/eth1DepositDataTracker.ts +0 -410
  1151. package/src/eth1/eth1DepositsCache.ts +0 -141
  1152. package/src/eth1/eth1MergeBlockTracker.ts +0 -328
  1153. package/src/eth1/index.ts +0 -157
  1154. package/src/eth1/interface.ts +0 -131
  1155. package/src/eth1/options.ts +0 -28
  1156. package/src/eth1/provider/eth1Provider.ts +0 -229
  1157. package/src/eth1/provider/jsonRpcHttpClient.ts +0 -390
  1158. package/src/eth1/provider/jwt.ts +0 -36
  1159. package/src/eth1/provider/utils.ts +0 -136
  1160. package/src/eth1/stream.ts +0 -75
  1161. package/src/eth1/utils/depositContract.ts +0 -37
  1162. package/src/eth1/utils/deposits.ts +0 -70
  1163. package/src/eth1/utils/eth1Data.ts +0 -100
  1164. package/src/eth1/utils/eth1DepositEvent.ts +0 -12
  1165. package/src/eth1/utils/eth1Vote.ts +0 -142
  1166. package/src/eth1/utils/groupDepositEventsByBlock.ts +0 -19
  1167. package/src/eth1/utils/optimizeNextBlockDiffForGenesis.ts +0 -18
  1168. package/src/execution/builder/cache.ts +0 -39
  1169. package/src/execution/builder/http.ts +0 -229
  1170. package/src/execution/builder/index.ts +0 -27
  1171. package/src/execution/builder/interface.ts +0 -49
  1172. package/src/execution/builder/utils.ts +0 -19
  1173. package/src/execution/engine/disabled.ts +0 -35
  1174. package/src/execution/engine/http.ts +0 -644
  1175. package/src/execution/engine/index.ts +0 -63
  1176. package/src/execution/engine/interface.ts +0 -199
  1177. package/src/execution/engine/mock.ts +0 -493
  1178. package/src/execution/engine/payloadIdCache.ts +0 -54
  1179. package/src/execution/engine/types.ts +0 -640
  1180. package/src/execution/engine/utils.ts +0 -136
  1181. package/src/execution/index.ts +0 -4
  1182. package/src/index.ts +0 -20
  1183. package/src/metrics/index.ts +0 -4
  1184. package/src/metrics/metrics/beacon.ts +0 -390
  1185. package/src/metrics/metrics/lodestar.ts +0 -1870
  1186. package/src/metrics/metrics.ts +0 -43
  1187. package/src/metrics/nodeJsMetrics.ts +0 -19
  1188. package/src/metrics/options.ts +0 -22
  1189. package/src/metrics/server/http.ts +0 -114
  1190. package/src/metrics/server/index.ts +0 -1
  1191. package/src/metrics/utils/avgMinMax.ts +0 -87
  1192. package/src/metrics/utils/gauge.ts +0 -22
  1193. package/src/metrics/utils/registryMetricCreator.ts +0 -41
  1194. package/src/monitoring/clientStats.ts +0 -297
  1195. package/src/monitoring/index.ts +0 -2
  1196. package/src/monitoring/options.ts +0 -19
  1197. package/src/monitoring/properties.ts +0 -152
  1198. package/src/monitoring/service.ts +0 -235
  1199. package/src/monitoring/system.ts +0 -146
  1200. package/src/monitoring/types.ts +0 -21
  1201. package/src/network/core/events.ts +0 -59
  1202. package/src/network/core/index.ts +0 -3
  1203. package/src/network/core/metrics.ts +0 -304
  1204. package/src/network/core/networkCore.ts +0 -599
  1205. package/src/network/core/networkCoreWorker.ts +0 -176
  1206. package/src/network/core/networkCoreWorkerHandler.ts +0 -284
  1207. package/src/network/core/types.ts +0 -119
  1208. package/src/network/discv5/index.ts +0 -132
  1209. package/src/network/discv5/types.ts +0 -74
  1210. package/src/network/discv5/utils.ts +0 -50
  1211. package/src/network/discv5/worker.ts +0 -137
  1212. package/src/network/events.ts +0 -51
  1213. package/src/network/forks.ts +0 -94
  1214. package/src/network/gossip/constants.ts +0 -15
  1215. package/src/network/gossip/encoding.ts +0 -111
  1216. package/src/network/gossip/errors.ts +0 -7
  1217. package/src/network/gossip/gossipsub.ts +0 -384
  1218. package/src/network/gossip/index.ts +0 -4
  1219. package/src/network/gossip/interface.ts +0 -215
  1220. package/src/network/gossip/metrics.ts +0 -71
  1221. package/src/network/gossip/scoringParameters.ts +0 -333
  1222. package/src/network/gossip/topic.ts +0 -332
  1223. package/src/network/index.ts +0 -8
  1224. package/src/network/interface.ts +0 -134
  1225. package/src/network/libp2p/error.ts +0 -55
  1226. package/src/network/libp2p/index.ts +0 -153
  1227. package/src/network/metadata.ts +0 -162
  1228. package/src/network/network.ts +0 -767
  1229. package/src/network/networkConfig.ts +0 -12
  1230. package/src/network/options.ts +0 -70
  1231. package/src/network/peers/client.ts +0 -29
  1232. package/src/network/peers/datastore.ts +0 -188
  1233. package/src/network/peers/discover.ts +0 -647
  1234. package/src/network/peers/index.ts +0 -2
  1235. package/src/network/peers/peerManager.ts +0 -899
  1236. package/src/network/peers/peersData.ts +0 -65
  1237. package/src/network/peers/score/constants.ts +0 -34
  1238. package/src/network/peers/score/index.ts +0 -4
  1239. package/src/network/peers/score/interface.ts +0 -74
  1240. package/src/network/peers/score/score.ts +0 -200
  1241. package/src/network/peers/score/store.ts +0 -95
  1242. package/src/network/peers/score/utils.ts +0 -37
  1243. package/src/network/peers/utils/assertPeerRelevance.ts +0 -99
  1244. package/src/network/peers/utils/enrSubnetsDeserialize.ts +0 -27
  1245. package/src/network/peers/utils/getConnectedPeerIds.ts +0 -33
  1246. package/src/network/peers/utils/index.ts +0 -4
  1247. package/src/network/peers/utils/prioritizePeers.ts +0 -627
  1248. package/src/network/peers/utils/subnetMap.ts +0 -88
  1249. package/src/network/processor/aggregatorTracker.ts +0 -38
  1250. package/src/network/processor/extractSlotRootFns.ts +0 -64
  1251. package/src/network/processor/gossipHandlers.ts +0 -951
  1252. package/src/network/processor/gossipQueues/index.ts +0 -114
  1253. package/src/network/processor/gossipQueues/indexed.ts +0 -219
  1254. package/src/network/processor/gossipQueues/linear.ts +0 -162
  1255. package/src/network/processor/gossipQueues/types.ts +0 -57
  1256. package/src/network/processor/gossipValidatorFn.ts +0 -142
  1257. package/src/network/processor/index.ts +0 -496
  1258. package/src/network/processor/types.ts +0 -27
  1259. package/src/network/reqresp/ReqRespBeaconNode.ts +0 -373
  1260. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +0 -101
  1261. package/src/network/reqresp/handlers/beaconBlocksByRoot.ts +0 -49
  1262. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +0 -114
  1263. package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +0 -62
  1264. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +0 -144
  1265. package/src/network/reqresp/handlers/dataColumnSidecarsByRoot.ts +0 -88
  1266. package/src/network/reqresp/handlers/index.ts +0 -78
  1267. package/src/network/reqresp/handlers/lightClientBootstrap.ts +0 -31
  1268. package/src/network/reqresp/handlers/lightClientFinalityUpdate.ts +0 -21
  1269. package/src/network/reqresp/handlers/lightClientOptimisticUpdate.ts +0 -21
  1270. package/src/network/reqresp/handlers/lightClientUpdatesByRange.ts +0 -39
  1271. package/src/network/reqresp/index.ts +0 -2
  1272. package/src/network/reqresp/interface.ts +0 -45
  1273. package/src/network/reqresp/protocols.ts +0 -146
  1274. package/src/network/reqresp/rateLimit.ts +0 -112
  1275. package/src/network/reqresp/score.ts +0 -70
  1276. package/src/network/reqresp/types.ts +0 -174
  1277. package/src/network/reqresp/utils/collect.ts +0 -84
  1278. package/src/network/reqresp/utils/collectSequentialBlocksInRange.ts +0 -57
  1279. package/src/network/reqresp/utils/dataColumnResponseValidation.ts +0 -99
  1280. package/src/network/statusCache.ts +0 -17
  1281. package/src/network/subnets/attnetsService.ts +0 -385
  1282. package/src/network/subnets/index.ts +0 -2
  1283. package/src/network/subnets/interface.ts +0 -66
  1284. package/src/network/subnets/syncnetsService.ts +0 -147
  1285. package/src/network/subnets/util.ts +0 -63
  1286. package/src/network/util.ts +0 -29
  1287. package/src/node/index.ts +0 -2
  1288. package/src/node/nodejs.ts +0 -349
  1289. package/src/node/notifier.ts +0 -206
  1290. package/src/node/options.ts +0 -51
  1291. package/src/node/utils/interop/deposits.ts +0 -53
  1292. package/src/node/utils/interop/state.ts +0 -59
  1293. package/src/node/utils/lightclient.ts +0 -7
  1294. package/src/node/utils/state.ts +0 -37
  1295. package/src/sync/backfill/backfill.ts +0 -893
  1296. package/src/sync/backfill/errors.ts +0 -23
  1297. package/src/sync/backfill/index.ts +0 -1
  1298. package/src/sync/backfill/verify.ts +0 -58
  1299. package/src/sync/constants.ts +0 -71
  1300. package/src/sync/index.ts +0 -2
  1301. package/src/sync/interface.ts +0 -55
  1302. package/src/sync/options.ts +0 -45
  1303. package/src/sync/range/batch.ts +0 -455
  1304. package/src/sync/range/chain.ts +0 -715
  1305. package/src/sync/range/range.ts +0 -354
  1306. package/src/sync/range/utils/batches.ts +0 -119
  1307. package/src/sync/range/utils/chainTarget.ts +0 -62
  1308. package/src/sync/range/utils/hashBlocks.ts +0 -27
  1309. package/src/sync/range/utils/index.ts +0 -5
  1310. package/src/sync/range/utils/peerBalancer.ts +0 -184
  1311. package/src/sync/range/utils/updateChains.ts +0 -66
  1312. package/src/sync/sync.ts +0 -290
  1313. package/src/sync/types.ts +0 -57
  1314. package/src/sync/unknownBlock.ts +0 -859
  1315. package/src/sync/utils/downloadByRange.ts +0 -808
  1316. package/src/sync/utils/downloadByRoot.ts +0 -560
  1317. package/src/sync/utils/pendingBlocksTree.ts +0 -97
  1318. package/src/sync/utils/remoteSyncType.ts +0 -144
  1319. package/src/util/address.ts +0 -3
  1320. package/src/util/array.ts +0 -311
  1321. package/src/util/asyncIterableToEvents.ts +0 -164
  1322. package/src/util/binarySearch.ts +0 -48
  1323. package/src/util/bitArray.ts +0 -84
  1324. package/src/util/blobs.ts +0 -210
  1325. package/src/util/bufferPool.ts +0 -95
  1326. package/src/util/bytes.ts +0 -11
  1327. package/src/util/chunkify.ts +0 -27
  1328. package/src/util/clock.ts +0 -212
  1329. package/src/util/dataColumns.ts +0 -415
  1330. package/src/util/dependentRoot.ts +0 -47
  1331. package/src/util/enum.ts +0 -17
  1332. package/src/util/error.ts +0 -56
  1333. package/src/util/eventLoop.ts +0 -22
  1334. package/src/util/execution.ts +0 -223
  1335. package/src/util/file.ts +0 -52
  1336. package/src/util/forkChoice.ts +0 -5
  1337. package/src/util/forkName.ts +0 -20
  1338. package/src/util/graffiti.ts +0 -39
  1339. package/src/util/hex.ts +0 -9
  1340. package/src/util/index.ts +0 -2
  1341. package/src/util/ip.ts +0 -6
  1342. package/src/util/itTrigger.ts +0 -49
  1343. package/src/util/kzg.ts +0 -3
  1344. package/src/util/map.ts +0 -77
  1345. package/src/util/metadata.ts +0 -22
  1346. package/src/util/multifork.ts +0 -69
  1347. package/src/util/numpy.ts +0 -8
  1348. package/src/util/peerId.ts +0 -16
  1349. package/src/util/profile.ts +0 -54
  1350. package/src/util/promises.ts +0 -14
  1351. package/src/util/queue/errors.ts +0 -14
  1352. package/src/util/queue/fnQueue.ts +0 -16
  1353. package/src/util/queue/index.ts +0 -4
  1354. package/src/util/queue/itemQueue.ts +0 -128
  1355. package/src/util/queue/options.ts +0 -37
  1356. package/src/util/serializedCache.ts +0 -20
  1357. package/src/util/set.ts +0 -62
  1358. package/src/util/shuffle.ts +0 -21
  1359. package/src/util/sortBy.ts +0 -19
  1360. package/src/util/sszBytes.ts +0 -481
  1361. package/src/util/strictEvents.ts +0 -8
  1362. package/src/util/time.ts +0 -13
  1363. package/src/util/timeSeries.ts +0 -118
  1364. package/src/util/types.ts +0 -31
  1365. package/src/util/workerEvents.ts +0 -142
  1366. package/src/util/wrapError.ts +0 -27
@@ -1,76 +1,21 @@
1
- import { ForkSeq } from "@lodestar/params";
2
- import { RequestError, RequestErrorCode } from "@lodestar/reqresp";
3
- import { prettyPrintIndices, pruneSetToMax, sleep } from "@lodestar/utils";
4
- import { isBlockInputBlobs, isBlockInputColumns } from "../chain/blocks/blockInput/blockInput.js";
5
- import { BlockInputSource } from "../chain/blocks/blockInput/types.js";
1
+ import { ForkName, ForkSeq, INTERVALS_PER_SLOT } from "@lodestar/params";
2
+ import { fromHex, pruneSetToMax, toRootHex } from "@lodestar/utils";
3
+ import { sleep } from "@lodestar/utils";
4
+ import { BlockInputType } from "../chain/blocks/types.js";
6
5
  import { BlockError, BlockErrorCode } from "../chain/errors/index.js";
7
- import { ChainEvent } from "../chain/index.js";
8
- import { NetworkEvent, prettyPrintPeerIdStr } from "../network/index.js";
6
+ import { NetworkEvent } from "../network/index.js";
7
+ import { beaconBlocksMaybeBlobsByRoot, unavailableBeaconBlobsByRoot, } from "../network/reqresp/beaconBlocksMaybeBlobsByRoot.js";
8
+ import { byteArrayEquals } from "../util/bytes.js";
9
9
  import { shuffle } from "../util/shuffle.js";
10
10
  import { sortBy } from "../util/sortBy.js";
11
11
  import { wrapError } from "../util/wrapError.js";
12
12
  import { MAX_CONCURRENT_REQUESTS } from "./constants.js";
13
- import { PendingBlockInputStatus, PendingBlockType, getBlockInputSyncCacheItemRootHex, getBlockInputSyncCacheItemSlot, isPendingBlockInput, } from "./types.js";
14
- import { DownloadByRootError, downloadByRoot } from "./utils/downloadByRoot.js";
13
+ import { PendingBlockStatus, PendingBlockType } from "./interface.js";
15
14
  import { getAllDescendantBlocks, getDescendantBlocks, getUnknownAndAncestorBlocks } from "./utils/pendingBlocksTree.js";
16
15
  const MAX_ATTEMPTS_PER_BLOCK = 5;
17
16
  const MAX_KNOWN_BAD_BLOCKS = 500;
18
17
  const MAX_PENDING_BLOCKS = 100;
19
- var FetchResult;
20
- (function (FetchResult) {
21
- FetchResult["SuccessResolved"] = "success_resolved";
22
- FetchResult["SuccessMissingParent"] = "success_missing_parent";
23
- FetchResult["SuccessLate"] = "success_late";
24
- FetchResult["FailureTriedAllPeers"] = "failure_tried_all_peers";
25
- FetchResult["FailureMaxAttempts"] = "failure_max_attempts";
26
- })(FetchResult || (FetchResult = {}));
27
- /**
28
- * BlockInputSync is a class that handles ReqResp to find blocks and data related to a specific blockRoot. The
29
- * blockRoot may have been found via object gossip, or the API. Gossip objects that can trigger a search are block,
30
- * blobs, columns, attestations, etc. In the case of blocks and data this is generally during the current slot but
31
- * can also be for items that are received late but are not fully verified and thus not in fork-choice (old blocks on
32
- * an unknown fork). It can also be triggered via an attestation (or sync committee message or any other item that
33
- * gets gossiped) that references a blockRoot that is not in fork-choice. In rare (and realistically should not happen)
34
- * situations it can get triggered via the API when the validator attempts to publish a block, attestation, aggregate
35
- * and proof or a sync committee contribution that has unknown information included (parentRoot for instance).
36
- *
37
- * The goal of the class is to make sure that all information that is necessary for import into fork-choice is pulled
38
- * from peers so that the block and data can be processed, and thus the object that triggered the search can be
39
- * referenced and validated.
40
- *
41
- * The most common case for this search is a set of block/data that comes across gossip for the current slot, during
42
- * normal chain operation, but not everything was received before the gossip cutoff window happens so it is necessary
43
- * to pull remaining data via req/resp so that fork-choice can be updated prior to making an attestation for the
44
- * current slot.
45
- *
46
- * Event sources for old UnknownBlock
47
- *
48
- * - publishBlock
49
- * - gossipHandlers
50
- * - searchUnknownSlotRoot
51
- * = produceSyncCommitteeContribution
52
- * = validateGossipFnRetryUnknownRoot
53
- * * submitPoolAttestationsV2
54
- * * publishAggregateAndProofsV2
55
- * = onPendingGossipsubMessage
56
- * * NetworkEvent.pendingGossipsubMessage
57
- * - onGossipsubMessage
58
- */
59
- export class BlockInputSync {
60
- config;
61
- network;
62
- chain;
63
- logger;
64
- metrics;
65
- opts;
66
- /**
67
- * block RootHex -> PendingBlock. To avoid finding same root at the same time
68
- */
69
- pendingBlocks = new Map();
70
- knownBadBlocks = new Set();
71
- maxPendingBlocks;
72
- subscribedToNetworkEvents = false;
73
- peerBalancer;
18
+ export class UnknownBlockSync {
74
19
  constructor(config, network, chain, logger, metrics, opts) {
75
20
  this.config = config;
76
21
  this.network = network;
@@ -78,227 +23,306 @@ export class BlockInputSync {
78
23
  this.logger = logger;
79
24
  this.metrics = metrics;
80
25
  this.opts = opts;
26
+ /**
27
+ * block RootHex -> PendingBlock. To avoid finding same root at the same time
28
+ */
29
+ this.pendingBlocks = new Map();
30
+ this.knownBadBlocks = new Set();
31
+ this.subscribedToNetworkEvents = false;
32
+ this.engineGetBlobsCache = new Map();
33
+ this.blockInputsRetryTrackerCache = new Set();
34
+ /**
35
+ * Process an unknownBlock event and register the block in `pendingBlocks` Map.
36
+ */
37
+ this.onUnknownBlock = (data) => {
38
+ try {
39
+ const unknownBlockType = this.addUnknownBlock(data.rootHex, data.peer);
40
+ this.triggerUnknownBlockSearch();
41
+ this.metrics?.syncUnknownBlock.requests.inc({ type: unknownBlockType });
42
+ }
43
+ catch (e) {
44
+ this.logger.debug("Error handling unknownBlock event", {}, e);
45
+ }
46
+ };
47
+ /**
48
+ * Process an unknownBlockInput event and register the block in `pendingBlocks` Map.
49
+ */
50
+ this.onUnknownBlockInput = (data) => {
51
+ try {
52
+ const unknownBlockType = this.addUnknownBlock(data.blockInput, data.peer);
53
+ this.triggerUnknownBlockSearch();
54
+ this.metrics?.syncUnknownBlock.requests.inc({ type: unknownBlockType });
55
+ }
56
+ catch (e) {
57
+ this.logger.debug("Error handling unknownBlockInput event", {}, e);
58
+ }
59
+ };
60
+ /**
61
+ * Process an unknownBlockParent event and register the block in `pendingBlocks` Map.
62
+ */
63
+ this.onUnknownParent = (data) => {
64
+ try {
65
+ this.addUnknownParent(data.blockInput, data.peer);
66
+ this.triggerUnknownBlockSearch();
67
+ this.metrics?.syncUnknownBlock.requests.inc({ type: PendingBlockType.UNKNOWN_PARENT });
68
+ }
69
+ catch (e) {
70
+ this.logger.debug("Error handling unknownBlockParent event", {}, e);
71
+ }
72
+ };
73
+ this.onPeerConnected = (data) => {
74
+ try {
75
+ const peerId = data.peer;
76
+ const peerSyncMeta = this.network.getConnectedPeerSyncMeta(peerId);
77
+ this.peerBalancer.onPeerConnected(data.peer, peerSyncMeta);
78
+ this.triggerUnknownBlockSearch();
79
+ }
80
+ catch (e) {
81
+ this.logger.debug("Error handling peerConnected event", {}, e);
82
+ }
83
+ };
84
+ this.onPeerDisconnected = (data) => {
85
+ const peerId = data.peer;
86
+ this.peerBalancer.onPeerDisconnected(peerId);
87
+ };
88
+ /**
89
+ * Gather tip parent blocks with unknown parent and do a search for all of them
90
+ */
91
+ this.triggerUnknownBlockSearch = () => {
92
+ // Cheap early stop to prevent calling the network.getConnectedPeers()
93
+ if (this.pendingBlocks.size === 0) {
94
+ return;
95
+ }
96
+ // If the node loses all peers with pending unknown blocks, the sync will stall
97
+ const connectedPeers = this.network.getConnectedPeers();
98
+ if (connectedPeers.length === 0) {
99
+ this.logger.debug("No connected peers, skipping unknown block search.");
100
+ return;
101
+ }
102
+ const { unknowns, ancestors } = getUnknownAndAncestorBlocks(this.pendingBlocks);
103
+ // it's rare when there is no unknown block
104
+ // see https://github.com/ChainSafe/lodestar/issues/5649#issuecomment-1594213550
105
+ if (unknowns.length === 0) {
106
+ let processedBlocks = 0;
107
+ for (const block of ancestors) {
108
+ // when this happens, it's likely the block and parent block are processed by head sync
109
+ if (this.chain.forkChoice.hasBlockHex(block.parentBlockRootHex)) {
110
+ processedBlocks++;
111
+ this.processBlock(block).catch((e) => {
112
+ this.logger.debug("Unexpected error - process old downloaded block", {}, e);
113
+ });
114
+ }
115
+ }
116
+ this.logger.verbose("No unknown block, process ancestor downloaded blocks", {
117
+ pendingBlocks: this.pendingBlocks.size,
118
+ ancestorBlocks: ancestors.length,
119
+ processedBlocks,
120
+ });
121
+ return;
122
+ }
123
+ // most of the time there is exactly 1 unknown block
124
+ for (const block of unknowns) {
125
+ this.downloadBlock(block).catch((e) => {
126
+ this.logger.debug("Unexpected error - downloadBlock", { root: block.blockRootHex }, e);
127
+ });
128
+ }
129
+ };
81
130
  this.maxPendingBlocks = opts?.maxPendingBlocks ?? MAX_PENDING_BLOCKS;
82
- this.peerBalancer = new UnknownBlockPeerBalancer();
131
+ this.proposerBoostSecWindow = this.config.SECONDS_PER_SLOT / INTERVALS_PER_SLOT;
132
+ this.peerBalancer = new UnknownBlockPeerBalancer(this.network.custodyConfig);
83
133
  if (metrics) {
84
- metrics.blockInputSync.pendingBlocks.addCollect(() => metrics.blockInputSync.pendingBlocks.set(this.pendingBlocks.size));
85
- metrics.blockInputSync.knownBadBlocks.addCollect(() => metrics.blockInputSync.knownBadBlocks.set(this.knownBadBlocks.size));
134
+ metrics.syncUnknownBlock.pendingBlocks.addCollect(() => {
135
+ metrics.syncUnknownBlock.pendingBlocks.set(this.pendingBlocks.size);
136
+ metrics.syncUnknownBlock.knownBadBlocks.set(this.knownBadBlocks.size);
137
+ metrics.syncUnknownBlock.peerBalancer.peersMetaCount.set(this.peerBalancer.peersMeta.size);
138
+ metrics.syncUnknownBlock.peerBalancer.peersActiveRequestCount.set(this.peerBalancer.activeRequests.size);
139
+ metrics.syncUnknownBlock.peerBalancer.totalActiveRequests.set(this.peerBalancer.getTotalActiveRequests());
140
+ });
86
141
  }
87
142
  }
88
143
  subscribeToNetwork() {
89
- if (this.opts?.disableBlockInputSync) {
90
- this.logger.verbose("BlockInputSync disabled by disableBlockInputSync option.");
91
- return;
144
+ if (!this.opts?.disableUnknownBlockSync) {
145
+ // cannot chain to the above if or the log will be incorrect
146
+ if (!this.subscribedToNetworkEvents) {
147
+ this.logger.verbose("UnknownBlockSync enabled.");
148
+ this.network.events.on(NetworkEvent.unknownBlock, this.onUnknownBlock);
149
+ this.network.events.on(NetworkEvent.unknownBlockInput, this.onUnknownBlockInput);
150
+ this.network.events.on(NetworkEvent.unknownBlockParent, this.onUnknownParent);
151
+ this.network.events.on(NetworkEvent.peerConnected, this.onPeerConnected);
152
+ this.network.events.on(NetworkEvent.peerDisconnected, this.onPeerDisconnected);
153
+ this.subscribedToNetworkEvents = true;
154
+ }
92
155
  }
93
- // cannot chain to the above if or the log will be incorrect
94
- if (!this.subscribedToNetworkEvents) {
95
- this.logger.verbose("BlockInputSync enabled.");
96
- this.chain.emitter.on(ChainEvent.unknownBlockRoot, this.onUnknownBlockRoot);
97
- this.chain.emitter.on(ChainEvent.incompleteBlockInput, this.onIncompleteBlockInput);
98
- this.chain.emitter.on(ChainEvent.unknownParent, this.onUnknownParent);
99
- this.network.events.on(NetworkEvent.peerConnected, this.onPeerConnected);
100
- this.network.events.on(NetworkEvent.peerDisconnected, this.onPeerDisconnected);
101
- this.subscribedToNetworkEvents = true;
156
+ else {
157
+ this.logger.verbose("UnknownBlockSync disabled by disableUnknownBlockSync option.");
102
158
  }
103
159
  }
104
160
  unsubscribeFromNetwork() {
105
- this.logger.verbose("BlockInputSync disabled.");
106
- this.chain.emitter.off(ChainEvent.unknownBlockRoot, this.onUnknownBlockRoot);
107
- this.chain.emitter.off(ChainEvent.incompleteBlockInput, this.onIncompleteBlockInput);
108
- this.chain.emitter.off(ChainEvent.unknownParent, this.onUnknownParent);
161
+ this.logger.verbose("UnknownBlockSync disabled.");
162
+ this.network.events.off(NetworkEvent.unknownBlock, this.onUnknownBlock);
163
+ this.network.events.off(NetworkEvent.unknownBlockInput, this.onUnknownBlockInput);
164
+ this.network.events.off(NetworkEvent.unknownBlockParent, this.onUnknownParent);
109
165
  this.network.events.off(NetworkEvent.peerConnected, this.onPeerConnected);
110
166
  this.network.events.off(NetworkEvent.peerDisconnected, this.onPeerDisconnected);
111
167
  this.subscribedToNetworkEvents = false;
112
168
  }
113
169
  close() {
114
170
  this.unsubscribeFromNetwork();
171
+ // add more in the future if needed
115
172
  }
116
173
  isSubscribedToNetwork() {
117
174
  return this.subscribedToNetworkEvents;
118
175
  }
119
176
  /**
120
- * Process an unknownBlock event and register the block in `pendingBlocks` Map.
177
+ * When a blockInput comes with an unknown parent:
178
+ * - add the block to pendingBlocks with status downloaded or pending blockRootHex as key. This is similar to
179
+ * an `onUnknownBlock` event, but the blocks is downloaded.
180
+ * - add the parent root to pendingBlocks with status pending, parentBlockRootHex as key. This is
181
+ * the same to an `onUnknownBlock` event with parentBlockRootHex as root.
121
182
  */
122
- onUnknownBlockRoot = (data) => {
123
- try {
124
- this.addByRootHex(data.rootHex, data.peer);
125
- this.triggerUnknownBlockSearch();
126
- this.metrics?.blockInputSync.requests.inc({ type: PendingBlockType.UNKNOWN_BLOCK_ROOT });
127
- this.metrics?.blockInputSync.source.inc({ source: data.source });
128
- }
129
- catch (e) {
130
- this.logger.debug("Error handling unknownBlockRoot event", {}, e);
131
- }
132
- };
133
- /**
134
- * Process an unknownBlockInput event and register the block in `pendingBlocks` Map.
135
- */
136
- onIncompleteBlockInput = (data) => {
137
- try {
138
- this.addByBlockInput(data.blockInput, data.peer);
139
- this.triggerUnknownBlockSearch();
140
- this.metrics?.blockInputSync.requests.inc({ type: PendingBlockType.INCOMPLETE_BLOCK_INPUT });
141
- this.metrics?.blockInputSync.source.inc({ source: data.source });
142
- }
143
- catch (e) {
144
- this.logger.debug("Error handling incompleteBlockInput event", {}, e);
145
- }
146
- };
147
- /**
148
- * Process an unknownBlockParent event and register the block in `pendingBlocks` Map.
149
- */
150
- onUnknownParent = (data) => {
151
- try {
152
- this.addByRootHex(data.blockInput.parentRootHex, data.peer);
153
- this.addByBlockInput(data.blockInput, data.peer);
154
- this.triggerUnknownBlockSearch();
155
- this.metrics?.blockInputSync.requests.inc({ type: PendingBlockType.UNKNOWN_PARENT });
156
- this.metrics?.blockInputSync.source.inc({ source: data.source });
157
- }
158
- catch (e) {
159
- this.logger.debug("Error handling unknownParent event", {}, e);
160
- }
161
- };
162
- addByRootHex = (rootHex, peerIdStr) => {
163
- let pendingBlock = this.pendingBlocks.get(rootHex);
183
+ addUnknownParent(blockInput, peerIdStr) {
184
+ const block = blockInput.block.message;
185
+ const blockRoot = this.config.getForkTypes(block.slot).BeaconBlock.hashTreeRoot(block);
186
+ const blockRootHex = toRootHex(blockRoot);
187
+ const parentBlockRootHex = toRootHex(block.parentRoot);
188
+ // add 1 pending block with status downloaded
189
+ let pendingBlock = this.pendingBlocks.get(blockRootHex);
164
190
  if (!pendingBlock) {
165
- pendingBlock = {
166
- status: PendingBlockInputStatus.pending,
167
- rootHex: rootHex,
168
- peerIdStrings: new Set(),
169
- timeAddedSec: Date.now() / 1000,
170
- };
171
- this.pendingBlocks.set(rootHex, pendingBlock);
172
- this.logger.verbose("Added new rootHex to BlockInputSync.pendingBlocks", {
173
- root: pendingBlock.rootHex,
174
- peerIdStr: peerIdStr ?? "unknown peer",
191
+ pendingBlock =
192
+ blockInput.type === BlockInputType.dataPromise
193
+ ? {
194
+ unknownBlockType: PendingBlockType.UNKNOWN_DATA,
195
+ blockRootHex,
196
+ // this will be set after we download block
197
+ parentBlockRootHex: null,
198
+ blockInput,
199
+ peerIdStrs: new Set(),
200
+ status: PendingBlockStatus.pending,
201
+ downloadAttempts: 0,
202
+ }
203
+ : {
204
+ blockRootHex,
205
+ parentBlockRootHex,
206
+ blockInput,
207
+ peerIdStrs: new Set(),
208
+ status: PendingBlockStatus.downloaded,
209
+ downloadAttempts: 0,
210
+ };
211
+ this.pendingBlocks.set(blockRootHex, pendingBlock);
212
+ this.logger.verbose("Added unknown block parent to pendingBlocks", {
213
+ root: blockRootHex,
214
+ parent: parentBlockRootHex,
175
215
  });
176
216
  }
177
- if (peerIdStr) {
178
- pendingBlock.peerIdStrings.add(peerIdStr);
217
+ pendingBlock.peerIdStrs.add(peerIdStr);
218
+ // add 1 pending block with status pending
219
+ this.addUnknownBlock(parentBlockRootHex, peerIdStr);
220
+ }
221
+ addUnknownBlock(blockInputOrRootHex, peerIdStr) {
222
+ let blockRootHex;
223
+ let blockInput;
224
+ let unknownBlockType;
225
+ if (typeof blockInputOrRootHex === "string") {
226
+ blockRootHex = blockInputOrRootHex;
227
+ blockInput = null;
228
+ unknownBlockType = PendingBlockType.UNKNOWN_BLOCK;
179
229
  }
180
- // TODO: check this prune methodology
181
- // Limit pending blocks to prevent DOS attacks that cause OOM
182
- const prunedItemCount = pruneSetToMax(this.pendingBlocks, this.maxPendingBlocks);
183
- if (prunedItemCount > 0) {
184
- this.logger.verbose(`Pruned ${prunedItemCount} items from BlockInputSync.pendingBlocks`);
185
- }
186
- };
187
- addByBlockInput = (blockInput, peerIdStr) => {
188
- let pendingBlock = this.pendingBlocks.get(blockInput.blockRootHex);
189
- // if entry is missing or was added via rootHex and now we have more complete information overwrite
190
- // the existing information with the more complete cache entry
191
- if (!pendingBlock || !isPendingBlockInput(pendingBlock)) {
230
+ else {
231
+ if (blockInputOrRootHex.block !== null) {
232
+ const { block } = blockInputOrRootHex;
233
+ blockRootHex = toRootHex(this.config.getForkTypes(block.message.slot).BeaconBlock.hashTreeRoot(block.message));
234
+ unknownBlockType = PendingBlockType.UNKNOWN_DATA;
235
+ }
236
+ else {
237
+ unknownBlockType = PendingBlockType.UNKNOWN_BLOCKINPUT;
238
+ blockRootHex = blockInputOrRootHex.blockRootHex;
239
+ }
240
+ blockInput = blockInputOrRootHex;
241
+ }
242
+ let pendingBlock = this.pendingBlocks.get(blockRootHex);
243
+ if (!pendingBlock) {
192
244
  pendingBlock = {
193
- // can be added via unknown parent and we may already have full block input. need to check and set correctly
194
- // so we pull the data if its missing or handle the block correctly in getIncompleteAndAncestorBlocks
195
- status: blockInput.hasBlockAndAllData() ? PendingBlockInputStatus.downloaded : PendingBlockInputStatus.pending,
245
+ unknownBlockType,
246
+ blockRootHex,
247
+ // this will be set after we download block
248
+ parentBlockRootHex: null,
196
249
  blockInput,
197
- peerIdStrings: new Set(),
198
- timeAddedSec: Date.now() / 1000,
250
+ peerIdStrs: new Set(),
251
+ status: PendingBlockStatus.pending,
252
+ downloadAttempts: 0,
199
253
  };
200
- this.pendingBlocks.set(blockInput.blockRootHex, pendingBlock);
201
- this.logger.verbose("Added blockInput to BlockInputSync.pendingBlocks", pendingBlock.blockInput.getLogMeta());
254
+ this.pendingBlocks.set(blockRootHex, pendingBlock);
255
+ this.logger.verbose("Added unknown block to pendingBlocks", {
256
+ unknownBlockType,
257
+ root: blockRootHex,
258
+ slot: blockInput?.block?.message.slot ?? "unknown",
259
+ });
202
260
  }
203
261
  if (peerIdStr) {
204
- pendingBlock.peerIdStrings.add(peerIdStr);
262
+ pendingBlock.peerIdStrs.add(peerIdStr);
205
263
  }
206
- // TODO: check this prune methodology
207
264
  // Limit pending blocks to prevent DOS attacks that cause OOM
208
265
  const prunedItemCount = pruneSetToMax(this.pendingBlocks, this.maxPendingBlocks);
209
266
  if (prunedItemCount > 0) {
210
- this.logger.verbose(`Pruned ${prunedItemCount} items from BlockInputSync.pendingBlocks`);
211
- }
212
- };
213
- onPeerConnected = (data) => {
214
- try {
215
- const peerId = data.peer;
216
- const peerSyncMeta = this.network.getConnectedPeerSyncMeta(peerId);
217
- this.peerBalancer.onPeerConnected(data.peer, peerSyncMeta);
218
- this.triggerUnknownBlockSearch();
219
- }
220
- catch (e) {
221
- this.logger.debug("Error handling peerConnected event", {}, e);
222
- }
223
- };
224
- onPeerDisconnected = (data) => {
225
- const peerId = data.peer;
226
- this.peerBalancer.onPeerDisconnected(peerId);
227
- };
228
- /**
229
- * Gather tip parent blocks with unknown parent and do a search for all of them
230
- */
231
- triggerUnknownBlockSearch = () => {
232
- // Cheap early stop to prevent calling the network.getConnectedPeers()
233
- if (this.pendingBlocks.size === 0) {
234
- return;
267
+ this.logger.warn(`Pruned ${prunedItemCount} pending blocks from UnknownBlockSync`);
235
268
  }
236
- // If the node loses all peers with pending unknown blocks, the sync will stall
237
- const connectedPeers = this.network.getConnectedPeers();
238
- if (connectedPeers.length === 0) {
239
- this.logger.debug("No connected peers, skipping unknown block search.");
240
- return;
241
- }
242
- const { unknowns, ancestors } = getUnknownAndAncestorBlocks(this.pendingBlocks);
243
- // it's rare when there is no unknown block
244
- // see https://github.com/ChainSafe/lodestar/issues/5649#issuecomment-1594213550
245
- if (unknowns.length === 0) {
246
- let processedBlocks = 0;
247
- for (const block of ancestors) {
248
- // when this happens, it's likely the block and parent block are processed by head sync
249
- if (this.chain.forkChoice.hasBlockHex(block.blockInput.parentRootHex)) {
250
- processedBlocks++;
251
- this.processBlock(block).catch((e) => {
252
- this.logger.debug("Unexpected error - process old downloaded block", {}, e);
253
- });
254
- }
255
- }
256
- this.logger.verbose("No unknown block, process ancestor downloaded blocks", {
257
- pendingBlocks: this.pendingBlocks.size,
258
- ancestorBlocks: ancestors.length,
259
- processedBlocks,
260
- });
261
- return;
262
- }
263
- // most of the time there is exactly 1 unknown block
264
- for (const block of unknowns) {
265
- this.downloadBlock(block).catch((e) => {
266
- this.logger.debug("Unexpected error - downloadBlock", { root: getBlockInputSyncCacheItemRootHex(block) }, e);
267
- });
268
- }
269
- };
269
+ return unknownBlockType;
270
+ }
270
271
  async downloadBlock(block) {
271
- if (block.status !== PendingBlockInputStatus.pending) {
272
+ if (block.status !== PendingBlockStatus.pending) {
272
273
  return;
273
274
  }
274
- const rootHex = getBlockInputSyncCacheItemRootHex(block);
275
+ const unknownBlockType = block.unknownBlockType;
275
276
  const logCtx = {
276
- slot: getBlockInputSyncCacheItemSlot(block),
277
- root: rootHex,
277
+ root: block.blockRootHex,
278
278
  pendingBlocks: this.pendingBlocks.size,
279
+ slot: block.blockInput?.block?.message.slot ?? "unknown",
280
+ unknownBlockType,
279
281
  };
280
- this.logger.verbose("BlockInputSync.downloadBlock()", logCtx);
281
- block.status = PendingBlockInputStatus.fetching;
282
- const res = await wrapError(this.fetchBlockInput(block));
282
+ this.logger.verbose("Downloading unknown block", logCtx);
283
+ block.status = PendingBlockStatus.fetching;
284
+ let res;
285
+ if (block.blockInput === null) {
286
+ // we only have block root, and nothing else
287
+ res = await wrapError(this.fetchUnknownBlockRoot(fromHex(block.blockRootHex)));
288
+ }
289
+ else {
290
+ res = await wrapError(this.fetchUnavailableBlockInput(block.blockInput));
291
+ }
292
+ if (res.err)
293
+ this.metrics?.syncUnknownBlock.downloadedBlocksError.inc();
294
+ else
295
+ this.metrics?.syncUnknownBlock.downloadedBlocksSuccess.inc();
283
296
  if (!res.err) {
284
- this.metrics?.blockInputSync.downloadedBlocksSuccess.inc();
285
- const pending = res.result;
286
- this.pendingBlocks.set(pending.blockInput.blockRootHex, pending);
287
- const blockSlot = pending.blockInput.slot;
297
+ const { blockInput, peerIdStr } = res.result;
298
+ // fetchUnknownBlockRoot and fetchUnavailableBlockInput should return available data BlockInput, throw error if not
299
+ if (blockInput.type === BlockInputType.dataPromise) {
300
+ // if there were any peers who would have had the missing datacolumns, it would have resulted in err
301
+ throw Error(`Expected BlockInput to be available, got dataPromise for ${block.blockRootHex}`);
302
+ }
303
+ block = {
304
+ ...block,
305
+ status: PendingBlockStatus.downloaded,
306
+ blockInput,
307
+ parentBlockRootHex: toRootHex(blockInput.block.message.parentRoot),
308
+ };
309
+ this.pendingBlocks.set(block.blockRootHex, block);
310
+ const blockSlot = blockInput.block.message.slot;
288
311
  const finalizedSlot = this.chain.forkChoice.getFinalizedBlock().slot;
289
312
  const delaySec = Date.now() / 1000 - (this.chain.genesisTime + blockSlot * this.config.SECONDS_PER_SLOT);
290
- this.metrics?.blockInputSync.elapsedTimeTillReceived.observe(delaySec);
291
- const parentInForkChoice = this.chain.forkChoice.hasBlockHex(pending.blockInput.parentRootHex);
292
- const logCtx2 = {
293
- ...logCtx,
294
- slot: blockSlot,
295
- parentInForkChoice,
296
- };
297
- this.logger.verbose("Downloaded unknown block", logCtx2);
298
- if (parentInForkChoice) {
313
+ this.metrics?.syncUnknownBlock.elapsedTimeTillReceived.observe(delaySec);
314
+ const parentInForkchoice = this.chain.forkChoice.hasBlock(blockInput.block.message.parentRoot);
315
+ this.logger.verbose("Downloaded unknown block", {
316
+ root: block.blockRootHex,
317
+ pendingBlocks: this.pendingBlocks.size,
318
+ parentInForkchoice,
319
+ blockInputType: blockInput.type,
320
+ unknownBlockType,
321
+ });
322
+ if (parentInForkchoice) {
299
323
  // Bingo! Process block. Add to pending blocks anyway for recycle the cache that prevents duplicate processing
300
- this.processBlock(pending).catch((e) => {
301
- this.logger.debug("Unexpected error - process newly downloaded block", logCtx2, e);
324
+ this.processBlock(block).catch((e) => {
325
+ this.logger.debug("Unexpected error - process newly downloaded block", {}, e);
302
326
  });
303
327
  }
304
328
  else if (blockSlot <= finalizedSlot) {
@@ -307,20 +331,34 @@ export class BlockInputSync {
307
331
  // 0 - 1 - ... - n - finalizedSlot
308
332
  // \
309
333
  // parent 1 - parent 2 - ... - unknownParent block
334
+ const blockRoot = this.config.getForkTypes(blockSlot).BeaconBlock.hashTreeRoot(blockInput.block.message);
310
335
  this.logger.debug("Downloaded block is before finalized slot", {
311
- ...logCtx2,
312
336
  finalizedSlot,
337
+ blockSlot,
338
+ parentRoot: toRootHex(blockRoot),
339
+ unknownBlockType,
313
340
  });
314
- this.removeAndDownScoreAllDescendants(block);
341
+ this.removeAndDownscoreAllDescendants(block);
315
342
  }
316
343
  else {
317
- this.onUnknownBlockRoot({ rootHex: pending.blockInput.parentRootHex, source: BlockInputSource.byRoot });
344
+ this.onUnknownParent({ blockInput, peer: peerIdStr });
318
345
  }
319
346
  }
320
347
  else {
321
- this.metrics?.blockInputSync.downloadedBlocksError.inc();
322
- this.logger.debug("Ignoring unknown block root after many failed downloads", logCtx, res.err);
323
- this.removeAndDownScoreAllDescendants(block);
348
+ // block download has error, this allows to retry the download of the block
349
+ block.status = PendingBlockStatus.pending;
350
+ // parentSlot > finalizedSlot, continue downloading parent of parent
351
+ block.downloadAttempts++;
352
+ const errorData = { root: block.blockRootHex, attempts: block.downloadAttempts, unknownBlockType };
353
+ if (block.downloadAttempts > MAX_ATTEMPTS_PER_BLOCK) {
354
+ // Give up on this block and assume it does not exist, penalizing all peers as if it was a bad block
355
+ this.logger.debug("Ignoring unknown block root after many failed downloads", errorData, res.err);
356
+ this.removeAndDownscoreAllDescendants(block);
357
+ }
358
+ else {
359
+ // Try again when a new peer connects, its status changes, or a new unknownBlockParent event happens
360
+ this.logger.debug("Error downloading unknown block root", errorData, res.err);
361
+ }
324
362
  }
325
363
  }
326
364
  /**
@@ -331,14 +369,11 @@ export class BlockInputSync {
331
369
  async processBlock(pendingBlock) {
332
370
  // pending block status is `downloaded` right after `downloadBlock`
333
371
  // but could be `pending` if added by `onUnknownBlockParent` event and this function is called recursively
334
- if (pendingBlock.status !== PendingBlockInputStatus.downloaded) {
335
- if (pendingBlock.status === PendingBlockInputStatus.pending) {
372
+ if (pendingBlock.status !== PendingBlockStatus.downloaded) {
373
+ if (pendingBlock.status === PendingBlockStatus.pending) {
336
374
  const connectedPeers = this.network.getConnectedPeers();
337
375
  if (connectedPeers.length === 0) {
338
- this.logger.debug("No connected peers, skipping download block", {
339
- slot: pendingBlock.blockInput.slot,
340
- blockRoot: pendingBlock.blockInput.blockRootHex,
341
- });
376
+ this.logger.debug("No connected peers, skipping download block", { blockRoot: pendingBlock.blockRootHex });
342
377
  return;
343
378
  }
344
379
  // if the download is a success we'll call `processBlock()` for this block
@@ -346,22 +381,23 @@ export class BlockInputSync {
346
381
  }
347
382
  return;
348
383
  }
349
- pendingBlock.status = PendingBlockInputStatus.processing;
384
+ pendingBlock.status = PendingBlockStatus.processing;
350
385
  // this prevents unbundling attack
351
386
  // see https://lighthouse-blog.sigmaprime.io/mev-unbundling-rpc.html
352
- const { slot: blockSlot, proposerIndex } = pendingBlock.blockInput.getBlock().message;
353
- const fork = this.config.getForkName(blockSlot);
354
- const proposerBoostWindowMs = this.config.getAttestationDueMs(fork);
355
- if (this.chain.clock.msFromSlot(blockSlot) < proposerBoostWindowMs &&
387
+ const { slot: blockSlot, proposerIndex } = pendingBlock.blockInput.block.message;
388
+ if (this.chain.clock.secFromSlot(blockSlot) < this.proposerBoostSecWindow &&
356
389
  this.chain.seenBlockProposers.isKnown(blockSlot, proposerIndex)) {
357
390
  // proposer is known by a gossip block already, wait a bit to make sure this block is not
358
391
  // eligible for proposer boost to prevent unbundling attack
392
+ const blockRoot = this.config
393
+ .getForkTypes(blockSlot)
394
+ .BeaconBlock.hashTreeRoot(pendingBlock.blockInput.block.message);
359
395
  this.logger.verbose("Avoid proposer boost for this block of known proposer", {
360
- slot: blockSlot,
361
- root: pendingBlock.blockInput.blockRootHex,
396
+ blockSlot,
397
+ blockRoot: toRootHex(blockRoot),
362
398
  proposerIndex,
363
399
  });
364
- await sleep(proposerBoostWindowMs);
400
+ await sleep(this.proposerBoostSecWindow * 1000);
365
401
  }
366
402
  // At gossip time, it's critical to keep a good number of mesh peers.
367
403
  // To do that, the Gossip Job Wait Time should be consistently <3s to avoid the behavior penalties in gossip
@@ -379,24 +415,21 @@ export class BlockInputSync {
379
415
  eagerPersistBlock: true,
380
416
  }));
381
417
  if (res.err)
382
- this.metrics?.blockInputSync.processedBlocksError.inc();
418
+ this.metrics?.syncUnknownBlock.processedBlocksError.inc();
383
419
  else
384
- this.metrics?.blockInputSync.processedBlocksSuccess.inc();
420
+ this.metrics?.syncUnknownBlock.processedBlocksSuccess.inc();
385
421
  if (!res.err) {
386
422
  // no need to update status to "processed", delete anyway
387
- this.pendingBlocks.delete(pendingBlock.blockInput.blockRootHex);
388
- this.chain.seenBlockInputCache.prune(pendingBlock.blockInput.blockRootHex);
423
+ this.pendingBlocks.delete(pendingBlock.blockRootHex);
389
424
  // Send child blocks to the processor
390
- for (const descendantBlock of getDescendantBlocks(pendingBlock.blockInput.blockRootHex, this.pendingBlocks)) {
391
- if (isPendingBlockInput(descendantBlock)) {
392
- this.processBlock(descendantBlock).catch((e) => {
393
- this.logger.debug("Unexpected error - process descendant block", {}, e);
394
- });
395
- }
425
+ for (const descendantBlock of getDescendantBlocks(pendingBlock.blockRootHex, this.pendingBlocks)) {
426
+ this.processBlock(descendantBlock).catch((e) => {
427
+ this.logger.debug("Unexpected error - process descendant block", {}, e);
428
+ });
396
429
  }
397
430
  }
398
431
  else {
399
- const errorData = { slot: pendingBlock.blockInput.slot, root: pendingBlock.blockInput.blockRootHex };
432
+ const errorData = { root: pendingBlock.blockRootHex, slot: pendingBlock.blockInput.block.message.slot };
400
433
  if (res.err instanceof BlockError) {
401
434
  switch (res.err.type.code) {
402
435
  // This cases are already handled with `{ignoreIfKnown: true}`
@@ -406,7 +439,7 @@ export class BlockInputSync {
406
439
  case BlockErrorCode.PRESTATE_MISSING:
407
440
  // Should not happen, mark as downloaded to try again latter
408
441
  this.logger.debug("Attempted to process block but its parent was still unknown", errorData, res.err);
409
- pendingBlock.status = PendingBlockInputStatus.downloaded;
442
+ pendingBlock.status = PendingBlockStatus.downloaded;
410
443
  break;
411
444
  case BlockErrorCode.EXECUTION_ENGINE_ERROR:
412
445
  // Removing the block(s) without penalizing the peers, hoping for EL to
@@ -416,13 +449,13 @@ export class BlockInputSync {
416
449
  default:
417
450
  // Block is not correct with respect to our chain. Log error loudly
418
451
  this.logger.debug("Error processing block from unknown parent sync", errorData, res.err);
419
- this.removeAndDownScoreAllDescendants(pendingBlock);
452
+ this.removeAndDownscoreAllDescendants(pendingBlock);
420
453
  }
421
454
  }
422
455
  // Probably a queue error or something unwanted happened, mark as pending to try again latter
423
456
  else {
424
457
  this.logger.debug("Unknown error processing block from unknown block sync", errorData, res.err);
425
- pendingBlock.status = PendingBlockInputStatus.downloaded;
458
+ pendingBlock.status = PendingBlockStatus.downloaded;
426
459
  }
427
460
  }
428
461
  }
@@ -435,129 +468,144 @@ export class BlockInputSync {
435
468
  * prefulu, will attempt a max of `MAX_ATTEMPTS_PER_BLOCK` on different peers, postfulu we may attempt more as defined in `getMaxDownloadAttempts()` function
436
469
  * Also verifies the received block root + returns the peer that provided the block for future downscoring.
437
470
  */
438
- async fetchBlockInput(cacheItem) {
439
- const rootHex = getBlockInputSyncCacheItemRootHex(cacheItem);
471
+ async fetchUnknownBlockRoot(blockRoot) {
472
+ const blockRootHex = toRootHex(blockRoot);
440
473
  const excludedPeers = new Set();
474
+ let partialDownload = null;
441
475
  const defaultPendingColumns = this.config.getForkSeq(this.chain.clock.currentSlot) >= ForkSeq.fulu
442
- ? new Set(this.network.custodyConfig.sampledColumns)
476
+ ? new Set(this.network.custodyConfig.sampleGroups)
443
477
  : null;
444
- const fetchStartSec = Date.now() / 1000;
445
- let slot = isPendingBlockInput(cacheItem) ? cacheItem.blockInput.slot : undefined;
446
- if (slot !== undefined) {
447
- this.metrics?.blockInputSync.fetchBegin.observe(this.chain.clock.secFromSlot(slot, fetchStartSec));
448
- }
478
+ let lastError = null;
449
479
  let i = 0;
450
480
  while (i++ < this.getMaxDownloadAttempts()) {
451
- const pendingColumns = isPendingBlockInput(cacheItem) && isBlockInputColumns(cacheItem.blockInput)
452
- ? new Set(cacheItem.blockInput.getMissingSampledColumnMeta().missing)
453
- : defaultPendingColumns;
454
- // pendingDataColumns is null pre-fulu
455
- const peerMeta = this.peerBalancer.bestPeerForPendingColumns(pendingColumns, excludedPeers);
456
- if (peerMeta === null) {
481
+ // pendingDataColumns is null prefulu
482
+ const peer = this.peerBalancer.bestPeerForPendingColumns(partialDownload ? new Set(partialDownload.pendingDataColumns) : defaultPendingColumns, excludedPeers);
483
+ if (peer === null) {
457
484
  // no more peer with needed columns to try, throw error
458
- let message = `Error fetching UnknownBlockRoot slot=${slot} root=${rootHex} after ${i}: cannot find peer`;
459
- if (pendingColumns) {
460
- message += ` with needed columns=${prettyPrintIndices(Array.from(pendingColumns))}`;
461
- }
462
- this.metrics?.blockInputSync.fetchTimeSec.observe({ result: FetchResult.FailureTriedAllPeers }, Date.now() / 1000 - fetchStartSec);
463
- this.metrics?.blockInputSync.fetchPeers.set({ result: FetchResult.FailureTriedAllPeers }, i);
464
- throw Error(message);
485
+ throw Error(`Error fetching UnknownBlockRoot after ${i}: cannot find peer with needed columns ${partialDownload?.pendingDataColumns.join(", ")}`);
465
486
  }
466
- const { peerId, client: peerClient } = peerMeta;
467
- cacheItem.peerIdStrings.add(peerId);
487
+ const { peerId, client: peerClient } = peer;
488
+ excludedPeers.add(peerId);
468
489
  try {
469
- const downloadResult = await downloadByRoot({
470
- config: this.config,
471
- network: this.network,
472
- seenCache: this.chain.seenBlockInputCache,
473
- emitter: this.chain.emitter,
474
- peerMeta,
475
- cacheItem,
476
- });
477
- cacheItem = downloadResult.result;
478
- if (slot === undefined) {
479
- slot = cacheItem.blockInput.slot;
480
- // we were not able to observe the time into slot when starting the fetch, do it now
481
- this.metrics?.blockInputSync.fetchBegin.observe(this.chain.clock.secFromSlot(slot, fetchStartSec));
490
+ const { blocks: [blockInput], pendingDataColumns, } = await beaconBlocksMaybeBlobsByRoot(this.config, this.network, peerId, [blockRoot], partialDownload, peerClient, this.metrics, this.logger);
491
+ // Peer does not have the block, try with next peer
492
+ if (blockInput === undefined) {
493
+ continue;
482
494
  }
483
- const logCtx = { slot, rootHex, peerId, peerClient };
484
- this.logger.verbose("BlockInputSync.fetchBlockInput: successful download", logCtx);
485
- this.metrics?.blockInputSync.downloadByRoot.success.inc();
486
- const warnings = downloadResult.warnings;
487
- if (warnings) {
488
- for (const warning of warnings) {
489
- this.logger.debug("BlockInputSync.fetchBlockInput: downloaded with warning", logCtx, warning);
490
- this.metrics?.blockInputSync.downloadByRoot.warn.inc({ code: warning.type.code, client: peerClient });
491
- }
492
- // TODO: penalize peer?
495
+ if (pendingDataColumns !== null) {
496
+ partialDownload = { blocks: [blockInput], pendingDataColumns };
497
+ continue;
493
498
  }
499
+ // data is available, verify block root is correct
500
+ const block = blockInput.block.message;
501
+ const receivedBlockRoot = this.config.getForkTypes(block.slot).BeaconBlock.hashTreeRoot(block);
502
+ if (!byteArrayEquals(receivedBlockRoot, blockRoot)) {
503
+ throw Error(`Wrong block received by peer, got ${toRootHex(receivedBlockRoot)} expected ${blockRootHex}`);
504
+ }
505
+ return { blockInput, peerIdStr: peerId };
494
506
  }
495
507
  catch (e) {
496
- this.logger.debug("Error downloading in BlockInputSync.fetchBlockInput", { slot, rootHex, attempt: i, peer: peerId, peerClient }, e);
497
- const downloadByRootMetrics = this.metrics?.blockInputSync.downloadByRoot;
498
- // TODO: penalize peer?
499
- if (e instanceof DownloadByRootError) {
500
- const errorCode = e.type.code;
501
- downloadByRootMetrics?.error.inc({ code: errorCode, client: peerClient });
502
- excludedPeers.add(peerId);
508
+ this.logger.debug("Error fetching UnknownBlockRoot", { attempt: i, blockRootHex, peer: peerId }, e);
509
+ lastError = e;
510
+ }
511
+ finally {
512
+ this.peerBalancer.onRequestCompleted(peerId);
513
+ }
514
+ }
515
+ if (lastError) {
516
+ lastError.message = `Error fetching UnknownBlockRoot after ${i} attempts: ${lastError.message}`;
517
+ throw lastError;
518
+ }
519
+ throw Error(`Error fetching UnknownBlockRoot after ${i}: cannot download all blobs or data columns for block ${blockRootHex}`);
520
+ }
521
+ /**
522
+ * We have partial block input:
523
+ * - we have block but not have all blobs (deneb) or needed columns (fulu)
524
+ * - we don't have block and have some blobs (deneb) or some columns (fulu)
525
+ * Fetches missing block/data columns/block for the blockinput. This function returns either preData or availableData BlockInput.
526
+ */
527
+ async fetchUnavailableBlockInput(unavailableBlockInput) {
528
+ if (unavailableBlockInput.block !== null && unavailableBlockInput.type !== BlockInputType.dataPromise) {
529
+ return { blockInput: unavailableBlockInput, peerIdStr: "" };
530
+ }
531
+ let blockRootHex;
532
+ let blobKzgCommitmentsLen;
533
+ let blockRoot;
534
+ const dataMeta = {};
535
+ let sampledColumns = [];
536
+ if (unavailableBlockInput.block === null) {
537
+ blockRootHex = unavailableBlockInput.blockRootHex;
538
+ blockRoot = fromHex(blockRootHex);
539
+ }
540
+ else {
541
+ const { cachedData, block: unavailableBlock } = unavailableBlockInput;
542
+ blockRoot = this.config
543
+ .getForkTypes(unavailableBlock.message.slot)
544
+ .BeaconBlock.hashTreeRoot(unavailableBlock.message);
545
+ blockRootHex = toRootHex(blockRoot);
546
+ blobKzgCommitmentsLen = unavailableBlock.message.body.blobKzgCommitments.length;
547
+ if (cachedData.fork === ForkName.deneb || cachedData.fork === ForkName.electra) {
548
+ const pendingBlobs = blobKzgCommitmentsLen - cachedData.blobsCache.size;
549
+ Object.assign(dataMeta, { pendingBlobs });
550
+ }
551
+ else if (cachedData.fork === ForkName.fulu) {
552
+ sampledColumns = this.network.custodyConfig.sampledColumns;
553
+ const pendingColumns = sampledColumns.length - cachedData.dataColumnsCache.size;
554
+ Object.assign(dataMeta, { pendingColumns });
555
+ }
556
+ }
557
+ let lastError = null;
558
+ let i = 0;
559
+ const excludedPeers = new Set();
560
+ while (i++ < this.getMaxDownloadAttempts()) {
561
+ const bestPeer = this.peerBalancer.bestPeerForBlockInput(unavailableBlockInput, excludedPeers);
562
+ if (bestPeer === null) {
563
+ // no more peer to try, throw error
564
+ throw Error(`Error fetching UnavailableBlockInput after ${i}: cannot find peer with needed columns ${sampledColumns.join(", ")}`);
565
+ }
566
+ const { peerId, client: peerClient } = bestPeer;
567
+ excludedPeers.add(peerId);
568
+ try {
569
+ const blockInput = await unavailableBeaconBlobsByRoot(this.config, this.network, peerId, peerClient, unavailableBlockInput, {
570
+ metrics: this.metrics,
571
+ logger: this.logger,
572
+ executionEngine: this.chain.executionEngine,
573
+ emitter: this.chain.emitter,
574
+ blockInputsRetryTrackerCache: this.blockInputsRetryTrackerCache,
575
+ engineGetBlobsCache: this.engineGetBlobsCache,
576
+ });
577
+ if (unavailableBlockInput.block !== null && blockInput.type === BlockInputType.dataPromise) {
578
+ // all datacolumns were not downloaded we can continue with other peers
579
+ // as unavailableBlockInput.block's dataColumnsCache would be updated
580
+ continue;
503
581
  }
504
- else if (e instanceof RequestError) {
505
- // should look into req_resp metrics in this case
506
- downloadByRootMetrics?.error.inc({ code: "req_resp", client: peerClient });
507
- switch (e.type.code) {
508
- case RequestErrorCode.REQUEST_RATE_LIMITED:
509
- case RequestErrorCode.REQUEST_TIMEOUT:
510
- // do not exclude peer for these errors
511
- break;
512
- default:
513
- excludedPeers.add(peerId);
514
- break;
515
- }
582
+ // data is available, verify block root is correct
583
+ const block = blockInput.block.message;
584
+ const receivedBlockRoot = this.config.getForkTypes(block.slot).BeaconBlock.hashTreeRoot(block);
585
+ if (!byteArrayEquals(receivedBlockRoot, blockRoot)) {
586
+ throw Error(`Wrong block received by peer, got ${toRootHex(receivedBlockRoot)} expected ${blockRootHex}`);
587
+ }
588
+ if (unavailableBlockInput.block === null) {
589
+ this.logger.debug("Fetched NullBlockInput", { attempts: i, blockRootHex });
516
590
  }
517
591
  else {
518
- // investigate if this happens
519
- downloadByRootMetrics?.error.inc({ code: "unknown", client: peerClient });
520
- excludedPeers.add(peerId);
592
+ this.logger.debug("Fetched UnavailableBlockInput", { attempts: i, ...dataMeta, blobKzgCommitmentsLen });
521
593
  }
594
+ return { blockInput, peerIdStr: peerId };
595
+ }
596
+ catch (e) {
597
+ this.logger.debug("Error fetching UnavailableBlockInput", { attempt: i, blockRootHex, peer: peerId }, e);
598
+ lastError = e;
522
599
  }
523
600
  finally {
524
601
  this.peerBalancer.onRequestCompleted(peerId);
525
602
  }
526
- this.pendingBlocks.set(getBlockInputSyncCacheItemRootHex(cacheItem), cacheItem);
527
- if (cacheItem.status === PendingBlockInputStatus.downloaded) {
528
- // download was successful, no need to go with another peer, return
529
- const result = this.chain.forkChoice.hasBlockHex(cacheItem.blockInput.blockRootHex)
530
- ? FetchResult.SuccessLate
531
- : this.chain.forkChoice.hasBlockHex(cacheItem.blockInput.parentRootHex)
532
- ? FetchResult.SuccessResolved
533
- : FetchResult.SuccessMissingParent;
534
- this.metrics?.blockInputSync.fetchTimeSec.observe({ result }, Date.now() / 1000 - fetchStartSec);
535
- this.metrics?.blockInputSync.fetchPeers.set({ result }, i);
536
- return cacheItem;
537
- }
538
- } // end while loop over peers
539
- const message = `Error fetching BlockInput with slot=${slot} root=${rootHex} after ${i - 1} attempts.`;
540
- if (!isPendingBlockInput(cacheItem)) {
541
- throw Error(`${message} No block and no data was found.`);
542
- }
543
- if (!cacheItem.blockInput.hasBlock()) {
544
- throw new Error(`${message} Block was not found.`);
545
- }
546
- if (isBlockInputBlobs(cacheItem.blockInput)) {
547
- const missing = cacheItem.blockInput.getMissingBlobMeta().map((b) => b.index);
548
- if (missing.length) {
549
- throw new Error(`${message} Missing blob indices=${prettyPrintIndices(missing)}.`);
550
- }
551
- }
552
- if (isBlockInputColumns(cacheItem.blockInput)) {
553
- const missing = cacheItem.blockInput.getMissingSampledColumnMeta().missing;
554
- if (missing.length) {
555
- throw new Error(`${message} Missing column indices=${prettyPrintIndices(missing)}.`);
556
- }
557
- }
558
- this.metrics?.blockInputSync.fetchTimeSec.observe({ result: FetchResult.FailureMaxAttempts }, Date.now() / 1000 - fetchStartSec);
559
- this.metrics?.blockInputSync.fetchPeers.set({ result: FetchResult.FailureMaxAttempts }, i - 1);
560
- throw Error(message);
603
+ }
604
+ if (lastError) {
605
+ lastError.message = `Error fetching UnavailableBlockInput after ${i} attempts: ${lastError.message}`;
606
+ throw lastError;
607
+ }
608
+ throw Error(`Error fetching UnavailableBlockInput after ${i}: unknown error`);
561
609
  }
562
610
  /**
563
611
  * Gets all descendant blocks of `block` recursively from `pendingBlocks`.
@@ -565,44 +613,33 @@ export class BlockInputSync {
565
613
  * Downscore all peers that have referenced any of this bad blocks. May report peers multiple times if they have
566
614
  * referenced more than one bad block.
567
615
  */
568
- removeAndDownScoreAllDescendants(block) {
616
+ removeAndDownscoreAllDescendants(block) {
569
617
  // Get all blocks that are a descendant of this one
570
618
  const badPendingBlocks = this.removeAllDescendants(block);
571
619
  // just console log and do not penalize on pending/bad blocks for debugging
572
620
  // console.log("removeAndDownscoreAllDescendants", {block});
573
621
  for (const block of badPendingBlocks) {
574
- //
575
- // TODO(fulu): why is this commented out here?
576
- //
577
622
  // this.knownBadBlocks.add(block.blockRootHex);
578
623
  // for (const peerIdStr of block.peerIdStrs) {
579
624
  // // TODO: Refactor peerRpcScores to work with peerIdStr only
580
625
  // this.network.reportPeer(peerIdStr, PeerAction.LowToleranceError, "BadBlockByRoot");
581
626
  // }
582
627
  this.logger.debug("ignored Banning unknown block", {
583
- slot: getBlockInputSyncCacheItemSlot(block),
584
- root: getBlockInputSyncCacheItemRootHex(block),
585
- peerIdStrings: Array.from(block.peerIdStrings)
586
- .map((id) => prettyPrintPeerIdStr(id))
587
- .join(","),
628
+ root: block.blockRootHex,
629
+ peerIdStrs: Array.from(block.peerIdStrs).join(","),
588
630
  });
589
631
  }
590
632
  // Prune knownBadBlocks
591
633
  pruneSetToMax(this.knownBadBlocks, MAX_KNOWN_BAD_BLOCKS);
592
634
  }
593
635
  removeAllDescendants(block) {
594
- const rootHex = getBlockInputSyncCacheItemRootHex(block);
595
- const slot = getBlockInputSyncCacheItemSlot(block);
596
636
  // Get all blocks that are a descendant of this one
597
- const badPendingBlocks = [block, ...getAllDescendantBlocks(rootHex, this.pendingBlocks)];
598
- this.metrics?.blockInputSync.removedBlocks.inc(badPendingBlocks.length);
637
+ const badPendingBlocks = [block, ...getAllDescendantBlocks(block.blockRootHex, this.pendingBlocks)];
638
+ this.metrics?.syncUnknownBlock.removedBlocks.inc(badPendingBlocks.length);
599
639
  for (const block of badPendingBlocks) {
600
- const rootHex = getBlockInputSyncCacheItemRootHex(block);
601
- this.pendingBlocks.delete(rootHex);
602
- this.chain.seenBlockInputCache.prune(rootHex);
603
- this.logger.debug("Removing bad/unknown/incomplete BlockInputSyncCacheItem", {
604
- slot,
605
- blockRoot: rootHex,
640
+ this.pendingBlocks.delete(block.blockRootHex);
641
+ this.logger.debug("Removing unknown parent block", {
642
+ root: block.blockRootHex,
606
643
  });
607
644
  }
608
645
  return badPendingBlocks;
@@ -620,11 +657,10 @@ export class BlockInputSync {
620
657
  * Class to track active byRoots requests and balance them across eligible peers.
621
658
  */
622
659
  export class UnknownBlockPeerBalancer {
623
- peersMeta;
624
- activeRequests;
625
- constructor() {
660
+ constructor(custodyConfig) {
626
661
  this.peersMeta = new Map();
627
662
  this.activeRequests = new Map();
663
+ this.custodyConfig = custodyConfig;
628
664
  }
629
665
  /** Trigger on each peer re-status */
630
666
  onPeerConnected(peerId, syncMeta) {
@@ -658,16 +694,36 @@ export class UnknownBlockPeerBalancer {
658
694
  * called from fetchUnavailableBlockInput() where we have either BlockInput or NullBlockInput
659
695
  * excludedPeers are the peers that we requested already so we don't want to try again
660
696
  */
661
- bestPeerForBlockInput(blockInput, excludedPeers) {
697
+ bestPeerForBlockInput(unavailableBlockInput, excludedPeers) {
698
+ let cachedData = undefined;
699
+ if (unavailableBlockInput.block === null) {
700
+ // NullBlockInput
701
+ cachedData = unavailableBlockInput.cachedData;
702
+ }
703
+ else {
704
+ // BlockInput
705
+ if (unavailableBlockInput.type !== BlockInputType.dataPromise) {
706
+ throw Error(`bestPeerForBlockInput called with BlockInput type ${unavailableBlockInput.type}, expected dataPromise`);
707
+ }
708
+ cachedData = unavailableBlockInput.cachedData;
709
+ }
662
710
  const eligiblePeers = [];
663
- if (isBlockInputColumns(blockInput)) {
664
- const pendingDataColumns = new Set(blockInput.getMissingSampledColumnMeta().missing);
665
- // there could be no pending column in case when block is still missing
711
+ if (cachedData.fork === ForkName.fulu) {
712
+ // cached data is CachedDataColumns
713
+ const { dataColumnsCache } = cachedData;
714
+ const pendingDataColumns = new Set();
715
+ for (const column of this.custodyConfig.sampledColumns) {
716
+ if (!dataColumnsCache.has(column)) {
717
+ pendingDataColumns.add(column);
718
+ }
719
+ }
720
+ // there could be no pending column in case of NullBlockInput
666
721
  eligiblePeers.push(...this.filterPeers(pendingDataColumns, excludedPeers));
667
722
  }
668
723
  else {
669
724
  // prefulu
670
- eligiblePeers.push(...this.filterPeers(null, excludedPeers));
725
+ const pendingDataColumns = null;
726
+ eligiblePeers.push(...this.filterPeers(pendingDataColumns, excludedPeers));
671
727
  }
672
728
  if (eligiblePeers.length === 0) {
673
729
  return null;
@@ -719,7 +775,7 @@ export class UnknownBlockPeerBalancer {
719
775
  continue;
720
776
  }
721
777
  // postfulu, find peers that have custody columns that we need
722
- const { custodyColumns: peerColumns } = syncMeta;
778
+ const { custodyGroups: peerColumns } = syncMeta;
723
779
  // check if the peer has all needed columns
724
780
  // get match
725
781
  const columns = peerColumns.reduce((acc, elem) => {