@lodestar/beacon-node 1.35.0-dev.f80d2d52da → 1.35.0-dev.fcf8d024ea

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