@lodestar/beacon-node 1.42.0-dev.c35b4283f1 → 1.42.0-dev.c58e92512e

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 (464) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +25 -13
  3. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  4. package/lib/api/impl/beacon/pool/index.d.ts.map +1 -1
  5. package/lib/api/impl/beacon/pool/index.js +5 -1
  6. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  7. package/lib/api/impl/beacon/state/index.d.ts.map +1 -1
  8. package/lib/api/impl/beacon/state/index.js +38 -40
  9. package/lib/api/impl/beacon/state/index.js.map +1 -1
  10. package/lib/api/impl/beacon/state/utils.d.ts +4 -4
  11. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
  12. package/lib/api/impl/beacon/state/utils.js +7 -10
  13. package/lib/api/impl/beacon/state/utils.js.map +1 -1
  14. package/lib/api/impl/debug/index.js.map +1 -1
  15. package/lib/api/impl/lodestar/index.d.ts.map +1 -1
  16. package/lib/api/impl/lodestar/index.js +8 -6
  17. package/lib/api/impl/lodestar/index.js.map +1 -1
  18. package/lib/api/impl/proof/index.d.ts.map +1 -1
  19. package/lib/api/impl/proof/index.js +2 -6
  20. package/lib/api/impl/proof/index.js.map +1 -1
  21. package/lib/api/impl/validator/index.d.ts.map +1 -1
  22. package/lib/api/impl/validator/index.js +33 -27
  23. package/lib/api/impl/validator/index.js.map +1 -1
  24. package/lib/api/impl/validator/utils.d.ts +2 -2
  25. package/lib/api/impl/validator/utils.d.ts.map +1 -1
  26. package/lib/api/impl/validator/utils.js +3 -3
  27. package/lib/api/impl/validator/utils.js.map +1 -1
  28. package/lib/chain/ColumnReconstructionTracker.d.ts +2 -1
  29. package/lib/chain/ColumnReconstructionTracker.d.ts.map +1 -1
  30. package/lib/chain/ColumnReconstructionTracker.js +5 -5
  31. package/lib/chain/ColumnReconstructionTracker.js.map +1 -1
  32. package/lib/chain/GetBlobsTracker.d.ts +2 -1
  33. package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
  34. package/lib/chain/GetBlobsTracker.js +14 -12
  35. package/lib/chain/GetBlobsTracker.js.map +1 -1
  36. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  37. package/lib/chain/archiveStore/archiveStore.js +1 -0
  38. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  39. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts +3 -7
  40. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +1 -1
  41. package/lib/chain/archiveStore/historicalState/getHistoricalState.js +8 -26
  42. package/lib/chain/archiveStore/historicalState/getHistoricalState.js.map +1 -1
  43. package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts +2 -2
  44. package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts.map +1 -1
  45. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js +1 -0
  46. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js.map +1 -1
  47. package/lib/chain/archiveStore/historicalState/types.d.ts +2 -0
  48. package/lib/chain/archiveStore/historicalState/types.d.ts.map +1 -1
  49. package/lib/chain/archiveStore/historicalState/types.js.map +1 -1
  50. package/lib/chain/archiveStore/historicalState/worker.js +1 -3
  51. package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
  52. package/lib/chain/archiveStore/interface.d.ts +1 -0
  53. package/lib/chain/archiveStore/interface.d.ts.map +1 -1
  54. package/lib/chain/balancesCache.d.ts +2 -2
  55. package/lib/chain/balancesCache.d.ts.map +1 -1
  56. package/lib/chain/balancesCache.js +4 -4
  57. package/lib/chain/balancesCache.js.map +1 -1
  58. package/lib/chain/blocks/blockInput/blockInput.d.ts +5 -5
  59. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
  60. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  61. package/lib/chain/blocks/blockInput/types.d.ts +5 -4
  62. package/lib/chain/blocks/blockInput/types.d.ts.map +1 -1
  63. package/lib/chain/blocks/blockInput/types.js +1 -0
  64. package/lib/chain/blocks/blockInput/types.js.map +1 -1
  65. package/lib/chain/blocks/importBlock.d.ts +3 -3
  66. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  67. package/lib/chain/blocks/importBlock.js +37 -23
  68. package/lib/chain/blocks/importBlock.js.map +1 -1
  69. package/lib/chain/blocks/importExecutionPayload.d.ts +10 -8
  70. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  71. package/lib/chain/blocks/importExecutionPayload.js +87 -51
  72. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  73. package/lib/chain/blocks/index.d.ts.map +1 -1
  74. package/lib/chain/blocks/index.js +3 -2
  75. package/lib/chain/blocks/index.js.map +1 -1
  76. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +14 -6
  77. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -1
  78. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +33 -2
  79. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -1
  80. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +2 -1
  81. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -1
  82. package/lib/chain/blocks/types.d.ts +21 -15
  83. package/lib/chain/blocks/types.d.ts.map +1 -1
  84. package/lib/chain/blocks/types.js.map +1 -1
  85. package/lib/chain/blocks/utils/checkpoint.d.ts +2 -2
  86. package/lib/chain/blocks/utils/checkpoint.d.ts.map +1 -1
  87. package/lib/chain/blocks/utils/checkpoint.js.map +1 -1
  88. package/lib/chain/blocks/verifyBlock.d.ts +2 -2
  89. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  90. package/lib/chain/blocks/verifyBlock.js +4 -4
  91. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  92. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +5 -5
  93. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  94. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +5 -4
  95. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  96. package/lib/chain/blocks/verifyBlocksSignatures.d.ts +2 -2
  97. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  98. package/lib/chain/blocks/verifyBlocksSignatures.js +4 -2
  99. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  100. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts +3 -3
  101. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +1 -1
  102. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js +3 -3
  103. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
  104. package/lib/chain/chain.d.ts +15 -14
  105. package/lib/chain/chain.d.ts.map +1 -1
  106. package/lib/chain/chain.js +110 -62
  107. package/lib/chain/chain.js.map +1 -1
  108. package/lib/chain/emitter.d.ts +31 -9
  109. package/lib/chain/emitter.d.ts.map +1 -1
  110. package/lib/chain/emitter.js +12 -3
  111. package/lib/chain/emitter.js.map +1 -1
  112. package/lib/chain/errors/blockError.d.ts +4 -4
  113. package/lib/chain/errors/blockError.d.ts.map +1 -1
  114. package/lib/chain/errors/dataColumnSidecarError.d.ts +31 -1
  115. package/lib/chain/errors/dataColumnSidecarError.d.ts.map +1 -1
  116. package/lib/chain/errors/dataColumnSidecarError.js +7 -0
  117. package/lib/chain/errors/dataColumnSidecarError.js.map +1 -1
  118. package/lib/chain/forkChoice/index.d.ts +4 -4
  119. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  120. package/lib/chain/forkChoice/index.js +30 -24
  121. package/lib/chain/forkChoice/index.js.map +1 -1
  122. package/lib/chain/initState.d.ts +2 -2
  123. package/lib/chain/initState.d.ts.map +1 -1
  124. package/lib/chain/initState.js +1 -1
  125. package/lib/chain/initState.js.map +1 -1
  126. package/lib/chain/interface.d.ts +15 -14
  127. package/lib/chain/interface.d.ts.map +1 -1
  128. package/lib/chain/lightClient/index.d.ts +2 -2
  129. package/lib/chain/lightClient/index.d.ts.map +1 -1
  130. package/lib/chain/lightClient/index.js +11 -4
  131. package/lib/chain/lightClient/index.js.map +1 -1
  132. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +6 -6
  133. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  134. package/lib/chain/opPools/aggregatedAttestationPool.js +13 -13
  135. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  136. package/lib/chain/opPools/executionPayloadBidPool.d.ts +2 -2
  137. package/lib/chain/opPools/executionPayloadBidPool.d.ts.map +1 -1
  138. package/lib/chain/opPools/executionPayloadBidPool.js +2 -2
  139. package/lib/chain/opPools/executionPayloadBidPool.js.map +1 -1
  140. package/lib/chain/opPools/opPool.d.ts +3 -3
  141. package/lib/chain/opPools/opPool.d.ts.map +1 -1
  142. package/lib/chain/opPools/opPool.js +7 -7
  143. package/lib/chain/opPools/opPool.js.map +1 -1
  144. package/lib/chain/opPools/utils.d.ts +2 -2
  145. package/lib/chain/opPools/utils.d.ts.map +1 -1
  146. package/lib/chain/opPools/utils.js +1 -1
  147. package/lib/chain/opPools/utils.js.map +1 -1
  148. package/lib/chain/options.d.ts +1 -0
  149. package/lib/chain/options.d.ts.map +1 -1
  150. package/lib/chain/options.js +1 -0
  151. package/lib/chain/options.js.map +1 -1
  152. package/lib/chain/prepareNextSlot.d.ts +2 -2
  153. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  154. package/lib/chain/prepareNextSlot.js +10 -4
  155. package/lib/chain/prepareNextSlot.js.map +1 -1
  156. package/lib/chain/produceBlock/computeNewStateRoot.d.ts +4 -4
  157. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
  158. package/lib/chain/produceBlock/computeNewStateRoot.js +3 -4
  159. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  160. package/lib/chain/produceBlock/produceBlockBody.d.ts +5 -5
  161. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  162. package/lib/chain/produceBlock/produceBlockBody.js +32 -17
  163. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  164. package/lib/chain/regen/interface.d.ts +13 -13
  165. package/lib/chain/regen/interface.d.ts.map +1 -1
  166. package/lib/chain/regen/queued.d.ts +14 -14
  167. package/lib/chain/regen/queued.d.ts.map +1 -1
  168. package/lib/chain/regen/queued.js.map +1 -1
  169. package/lib/chain/regen/regen.d.ts +6 -5
  170. package/lib/chain/regen/regen.d.ts.map +1 -1
  171. package/lib/chain/regen/regen.js +6 -6
  172. package/lib/chain/regen/regen.js.map +1 -1
  173. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +1 -1
  174. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
  175. package/lib/chain/seenCache/seenGossipBlockInput.js +2 -2
  176. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  177. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +1 -1
  178. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -1
  179. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +2 -2
  180. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -1
  181. package/lib/chain/serializeState.d.ts +2 -2
  182. package/lib/chain/serializeState.d.ts.map +1 -1
  183. package/lib/chain/serializeState.js +1 -1
  184. package/lib/chain/serializeState.js.map +1 -1
  185. package/lib/chain/shufflingCache.d.ts +2 -2
  186. package/lib/chain/shufflingCache.d.ts.map +1 -1
  187. package/lib/chain/shufflingCache.js +3 -4
  188. package/lib/chain/shufflingCache.js.map +1 -1
  189. package/lib/chain/stateCache/fifoBlockStateCache.d.ts +6 -6
  190. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -1
  191. package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
  192. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +11 -11
  193. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  194. package/lib/chain/stateCache/persistentCheckpointsCache.js +12 -16
  195. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  196. package/lib/chain/stateCache/types.d.ts +14 -14
  197. package/lib/chain/stateCache/types.d.ts.map +1 -1
  198. package/lib/chain/stateCache/types.js.map +1 -1
  199. package/lib/chain/validation/attesterSlashing.js +3 -3
  200. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  201. package/lib/chain/validation/blobSidecar.js +1 -1
  202. package/lib/chain/validation/blobSidecar.js.map +1 -1
  203. package/lib/chain/validation/block.d.ts.map +1 -1
  204. package/lib/chain/validation/block.js +3 -3
  205. package/lib/chain/validation/block.js.map +1 -1
  206. package/lib/chain/validation/blsToExecutionChange.js +2 -2
  207. package/lib/chain/validation/blsToExecutionChange.js.map +1 -1
  208. package/lib/chain/validation/dataColumnSidecar.d.ts +11 -4
  209. package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
  210. package/lib/chain/validation/dataColumnSidecar.js +185 -6
  211. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  212. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  213. package/lib/chain/validation/executionPayloadBid.js +10 -7
  214. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  215. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
  216. package/lib/chain/validation/executionPayloadEnvelope.js +7 -3
  217. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  218. package/lib/chain/validation/payloadAttestationMessage.js +5 -3
  219. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
  220. package/lib/chain/validation/proposerSlashing.js +1 -1
  221. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  222. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts +2 -2
  223. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -1
  224. package/lib/chain/validation/signatureSets/contributionAndProof.js +1 -1
  225. package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
  226. package/lib/chain/validation/signatureSets/syncCommittee.d.ts +2 -2
  227. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -1
  228. package/lib/chain/validation/signatureSets/syncCommittee.js +1 -1
  229. package/lib/chain/validation/signatureSets/syncCommittee.js.map +1 -1
  230. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts +2 -2
  231. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -1
  232. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js.map +1 -1
  233. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts +2 -2
  234. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -1
  235. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js +1 -1
  236. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js.map +1 -1
  237. package/lib/chain/validation/syncCommittee.d.ts +3 -3
  238. package/lib/chain/validation/syncCommittee.d.ts.map +1 -1
  239. package/lib/chain/validation/syncCommittee.js +5 -1
  240. package/lib/chain/validation/syncCommittee.js.map +1 -1
  241. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
  242. package/lib/chain/validation/syncCommitteeContributionAndProof.js +5 -2
  243. package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
  244. package/lib/chain/validation/voluntaryExit.d.ts.map +1 -1
  245. package/lib/chain/validation/voluntaryExit.js +3 -3
  246. package/lib/chain/validation/voluntaryExit.js.map +1 -1
  247. package/lib/chain/validatorMonitor.d.ts +3 -3
  248. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  249. package/lib/chain/validatorMonitor.js +11 -9
  250. package/lib/chain/validatorMonitor.js.map +1 -1
  251. package/lib/db/buckets.d.ts +2 -2
  252. package/lib/db/buckets.d.ts.map +1 -1
  253. package/lib/db/buckets.js +2 -2
  254. package/lib/db/buckets.js.map +1 -1
  255. package/lib/db/repositories/blockArchiveIndex.d.ts +2 -2
  256. package/lib/db/repositories/blockArchiveIndex.d.ts.map +1 -1
  257. package/lib/db/repositories/dataColumnSidecar.d.ts.map +1 -1
  258. package/lib/db/repositories/dataColumnSidecar.js +4 -2
  259. package/lib/db/repositories/dataColumnSidecar.js.map +1 -1
  260. package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +1 -1
  261. package/lib/db/repositories/dataColumnSidecarArchive.js +4 -2
  262. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
  263. package/lib/metrics/metrics/lodestar.d.ts +32 -4
  264. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  265. package/lib/metrics/metrics/lodestar.js +52 -15
  266. package/lib/metrics/metrics/lodestar.js.map +1 -1
  267. package/lib/network/interface.d.ts +7 -4
  268. package/lib/network/interface.d.ts.map +1 -1
  269. package/lib/network/libp2p/index.d.ts.map +1 -1
  270. package/lib/network/libp2p/index.js +22 -11
  271. package/lib/network/libp2p/index.js.map +1 -1
  272. package/lib/network/network.d.ts +7 -4
  273. package/lib/network/network.d.ts.map +1 -1
  274. package/lib/network/network.js +12 -3
  275. package/lib/network/network.js.map +1 -1
  276. package/lib/network/options.d.ts.map +1 -1
  277. package/lib/network/options.js +7 -2
  278. package/lib/network/options.js.map +1 -1
  279. package/lib/network/processor/extractSlotRootFns.d.ts +1 -1
  280. package/lib/network/processor/extractSlotRootFns.d.ts.map +1 -1
  281. package/lib/network/processor/extractSlotRootFns.js +25 -5
  282. package/lib/network/processor/extractSlotRootFns.js.map +1 -1
  283. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  284. package/lib/network/processor/gossipHandlers.js +261 -74
  285. package/lib/network/processor/gossipHandlers.js.map +1 -1
  286. package/lib/network/processor/index.d.ts +22 -7
  287. package/lib/network/processor/index.d.ts.map +1 -1
  288. package/lib/network/processor/index.js +313 -80
  289. package/lib/network/processor/index.js.map +1 -1
  290. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -1
  291. package/lib/network/reqresp/ReqRespBeaconNode.js +9 -0
  292. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  293. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts +8 -0
  294. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts.map +1 -0
  295. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js +69 -0
  296. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js.map +1 -0
  297. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.d.ts +6 -0
  298. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.d.ts.map +1 -0
  299. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js +28 -0
  300. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js.map +1 -0
  301. package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
  302. package/lib/network/reqresp/handlers/index.js +11 -1
  303. package/lib/network/reqresp/handlers/index.js.map +1 -1
  304. package/lib/network/reqresp/protocols.d.ts +2 -0
  305. package/lib/network/reqresp/protocols.d.ts.map +1 -1
  306. package/lib/network/reqresp/protocols.js +10 -0
  307. package/lib/network/reqresp/protocols.js.map +1 -1
  308. package/lib/network/reqresp/rateLimit.d.ts.map +1 -1
  309. package/lib/network/reqresp/rateLimit.js +8 -0
  310. package/lib/network/reqresp/rateLimit.js.map +1 -1
  311. package/lib/network/reqresp/score.d.ts.map +1 -1
  312. package/lib/network/reqresp/score.js +2 -0
  313. package/lib/network/reqresp/score.js.map +1 -1
  314. package/lib/network/reqresp/types.d.ts +10 -4
  315. package/lib/network/reqresp/types.d.ts.map +1 -1
  316. package/lib/network/reqresp/types.js +16 -4
  317. package/lib/network/reqresp/types.js.map +1 -1
  318. package/lib/node/nodejs.d.ts +2 -2
  319. package/lib/node/nodejs.d.ts.map +1 -1
  320. package/lib/node/nodejs.js +3 -3
  321. package/lib/node/nodejs.js.map +1 -1
  322. package/lib/node/notifier.d.ts.map +1 -1
  323. package/lib/node/notifier.js +3 -3
  324. package/lib/node/notifier.js.map +1 -1
  325. package/lib/sync/backfill/backfill.d.ts +2 -2
  326. package/lib/sync/backfill/backfill.d.ts.map +1 -1
  327. package/lib/sync/backfill/backfill.js +2 -2
  328. package/lib/sync/backfill/backfill.js.map +1 -1
  329. package/lib/sync/unknownBlock.d.ts +1 -1
  330. package/lib/sync/unknownBlock.js +3 -3
  331. package/lib/sync/unknownBlock.js.map +1 -1
  332. package/lib/sync/utils/downloadByRange.d.ts +3 -3
  333. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  334. package/lib/sync/utils/downloadByRange.js +4 -2
  335. package/lib/sync/utils/downloadByRange.js.map +1 -1
  336. package/lib/sync/utils/downloadByRoot.d.ts +3 -3
  337. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  338. package/lib/sync/utils/downloadByRoot.js +10 -5
  339. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  340. package/lib/util/blobs.d.ts +3 -3
  341. package/lib/util/blobs.d.ts.map +1 -1
  342. package/lib/util/blobs.js +21 -10
  343. package/lib/util/blobs.js.map +1 -1
  344. package/lib/util/dataColumns.d.ts +18 -11
  345. package/lib/util/dataColumns.d.ts.map +1 -1
  346. package/lib/util/dataColumns.js +51 -17
  347. package/lib/util/dataColumns.js.map +1 -1
  348. package/lib/util/execution.d.ts +6 -2
  349. package/lib/util/execution.d.ts.map +1 -1
  350. package/lib/util/execution.js +49 -25
  351. package/lib/util/execution.js.map +1 -1
  352. package/lib/util/sszBytes.d.ts +25 -1
  353. package/lib/util/sszBytes.d.ts.map +1 -1
  354. package/lib/util/sszBytes.js +189 -2
  355. package/lib/util/sszBytes.js.map +1 -1
  356. package/lib/util/types.d.ts +2 -0
  357. package/lib/util/types.d.ts.map +1 -1
  358. package/lib/util/types.js +1 -0
  359. package/lib/util/types.js.map +1 -1
  360. package/package.json +16 -16
  361. package/src/api/impl/beacon/blocks/index.ts +33 -16
  362. package/src/api/impl/beacon/pool/index.ts +5 -1
  363. package/src/api/impl/beacon/state/index.ts +43 -55
  364. package/src/api/impl/beacon/state/utils.ts +11 -25
  365. package/src/api/impl/debug/index.ts +2 -2
  366. package/src/api/impl/lodestar/index.ts +8 -8
  367. package/src/api/impl/proof/index.ts +2 -9
  368. package/src/api/impl/validator/index.ts +36 -41
  369. package/src/api/impl/validator/utils.ts +4 -7
  370. package/src/chain/ColumnReconstructionTracker.ts +6 -5
  371. package/src/chain/GetBlobsTracker.ts +14 -12
  372. package/src/chain/archiveStore/archiveStore.ts +1 -0
  373. package/src/chain/archiveStore/historicalState/getHistoricalState.ts +10 -39
  374. package/src/chain/archiveStore/historicalState/historicalStateRegen.ts +2 -1
  375. package/src/chain/archiveStore/historicalState/types.ts +2 -0
  376. package/src/chain/archiveStore/historicalState/worker.ts +1 -4
  377. package/src/chain/archiveStore/interface.ts +1 -0
  378. package/src/chain/balancesCache.ts +5 -11
  379. package/src/chain/blocks/blockInput/blockInput.ts +8 -8
  380. package/src/chain/blocks/blockInput/types.ts +5 -4
  381. package/src/chain/blocks/importBlock.ts +50 -31
  382. package/src/chain/blocks/importExecutionPayload.ts +98 -62
  383. package/src/chain/blocks/index.ts +3 -2
  384. package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +53 -12
  385. package/src/chain/blocks/payloadEnvelopeInput/types.ts +2 -1
  386. package/src/chain/blocks/types.ts +26 -15
  387. package/src/chain/blocks/utils/checkpoint.ts +2 -2
  388. package/src/chain/blocks/verifyBlock.ts +5 -10
  389. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +10 -14
  390. package/src/chain/blocks/verifyBlocksSignatures.ts +10 -3
  391. package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +6 -8
  392. package/src/chain/chain.ts +148 -95
  393. package/src/chain/emitter.ts +27 -9
  394. package/src/chain/errors/blockError.ts +4 -4
  395. package/src/chain/errors/dataColumnSidecarError.ts +32 -1
  396. package/src/chain/forkChoice/index.ts +35 -41
  397. package/src/chain/initState.ts +7 -2
  398. package/src/chain/interface.ts +16 -15
  399. package/src/chain/lightClient/index.ts +17 -18
  400. package/src/chain/opPools/aggregatedAttestationPool.ts +20 -21
  401. package/src/chain/opPools/executionPayloadBidPool.ts +3 -3
  402. package/src/chain/opPools/opPool.ts +13 -14
  403. package/src/chain/opPools/utils.ts +3 -3
  404. package/src/chain/options.ts +2 -0
  405. package/src/chain/prepareNextSlot.ts +14 -8
  406. package/src/chain/produceBlock/computeNewStateRoot.ts +7 -10
  407. package/src/chain/produceBlock/produceBlockBody.ts +49 -46
  408. package/src/chain/regen/interface.ts +13 -17
  409. package/src/chain/regen/queued.ts +16 -20
  410. package/src/chain/regen/regen.ts +16 -17
  411. package/src/chain/seenCache/seenGossipBlockInput.ts +2 -2
  412. package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +2 -2
  413. package/src/chain/serializeState.ts +3 -3
  414. package/src/chain/shufflingCache.ts +5 -7
  415. package/src/chain/stateCache/fifoBlockStateCache.ts +7 -7
  416. package/src/chain/stateCache/persistentCheckpointsCache.ts +27 -42
  417. package/src/chain/stateCache/types.ts +14 -18
  418. package/src/chain/validation/attesterSlashing.ts +3 -3
  419. package/src/chain/validation/blobSidecar.ts +1 -1
  420. package/src/chain/validation/block.ts +3 -4
  421. package/src/chain/validation/blsToExecutionChange.ts +2 -2
  422. package/src/chain/validation/dataColumnSidecar.ts +231 -8
  423. package/src/chain/validation/executionPayloadBid.ts +10 -10
  424. package/src/chain/validation/executionPayloadEnvelope.ts +7 -4
  425. package/src/chain/validation/payloadAttestationMessage.ts +6 -4
  426. package/src/chain/validation/proposerSlashing.ts +1 -1
  427. package/src/chain/validation/signatureSets/contributionAndProof.ts +2 -7
  428. package/src/chain/validation/signatureSets/syncCommittee.ts +2 -7
  429. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +2 -2
  430. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +2 -7
  431. package/src/chain/validation/syncCommittee.ts +10 -6
  432. package/src/chain/validation/syncCommitteeContributionAndProof.ts +9 -10
  433. package/src/chain/validation/voluntaryExit.ts +3 -8
  434. package/src/chain/validatorMonitor.ts +15 -13
  435. package/src/db/buckets.ts +2 -2
  436. package/src/db/repositories/dataColumnSidecar.ts +4 -2
  437. package/src/db/repositories/dataColumnSidecarArchive.ts +4 -2
  438. package/src/metrics/metrics/lodestar.ts +57 -19
  439. package/src/network/interface.ts +18 -4
  440. package/src/network/libp2p/index.ts +24 -13
  441. package/src/network/network.ts +39 -8
  442. package/src/network/options.ts +7 -2
  443. package/src/network/processor/extractSlotRootFns.ts +32 -6
  444. package/src/network/processor/gossipHandlers.ts +326 -87
  445. package/src/network/processor/index.ts +395 -92
  446. package/src/network/reqresp/ReqRespBeaconNode.ts +13 -0
  447. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRange.ts +94 -0
  448. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRoot.ts +43 -0
  449. package/src/network/reqresp/handlers/index.ts +12 -0
  450. package/src/network/reqresp/protocols.ts +12 -0
  451. package/src/network/reqresp/rateLimit.ts +18 -0
  452. package/src/network/reqresp/score.ts +2 -0
  453. package/src/network/reqresp/types.ts +26 -5
  454. package/src/node/nodejs.ts +6 -5
  455. package/src/node/notifier.ts +5 -6
  456. package/src/sync/backfill/backfill.ts +3 -3
  457. package/src/sync/unknownBlock.ts +4 -4
  458. package/src/sync/utils/downloadByRange.ts +9 -7
  459. package/src/sync/utils/downloadByRoot.ts +16 -12
  460. package/src/util/blobs.ts +35 -15
  461. package/src/util/dataColumns.ts +69 -25
  462. package/src/util/execution.ts +49 -30
  463. package/src/util/sszBytes.ts +245 -3
  464. package/src/util/types.ts +6 -0
@@ -1,24 +1,16 @@
1
1
  import {routes} from "@lodestar/api";
2
2
  import {ApplicationMethods} from "@lodestar/api/server";
3
+ import {EPOCHS_PER_HISTORICAL_VECTOR, SLOTS_PER_EPOCH, SYNC_COMMITTEE_SUBNET_SIZE} from "@lodestar/params";
3
4
  import {
4
- EPOCHS_PER_HISTORICAL_VECTOR,
5
- SLOTS_PER_EPOCH,
6
- SYNC_COMMITTEE_SUBNET_SIZE,
7
- isForkPostElectra,
8
- isForkPostFulu,
9
- } from "@lodestar/params";
10
- import {
11
- BeaconStateAllForks,
12
- BeaconStateElectra,
13
- BeaconStateFulu,
14
- CachedBeaconStateAltair,
5
+ IBeaconStateView,
15
6
  computeEpochAtSlot,
16
7
  computeStartSlotAtEpoch,
17
8
  getCurrentEpoch,
18
- getRandaoMix,
19
- loadState,
9
+ isStatePostAltair,
10
+ isStatePostElectra,
11
+ isStatePostFulu,
20
12
  } from "@lodestar/state-transition";
21
- import {ValidatorIndex, getValidatorStatus} from "@lodestar/types";
13
+ import {ValidatorIndex, getValidatorStatus, ssz} from "@lodestar/types";
22
14
  import {ApiError} from "../../errors.js";
23
15
  import {ApiModules} from "../../types.js";
24
16
  import {assertUniqueItems} from "../../utils.js";
@@ -35,11 +27,11 @@ export function getBeaconStateApi({
35
27
  }: Pick<ApiModules, "chain" | "config">): ApplicationMethods<routes.beacon.state.Endpoints> {
36
28
  async function getState(
37
29
  stateId: routes.beacon.StateId
38
- ): Promise<{state: BeaconStateAllForks; executionOptimistic: boolean; finalized: boolean}> {
30
+ ): Promise<{state: IBeaconStateView; executionOptimistic: boolean; finalized: boolean}> {
39
31
  const {state, executionOptimistic, finalized} = await getStateResponseWithRegen(chain, stateId);
40
32
 
41
33
  return {
42
- state: state instanceof Uint8Array ? loadState(config, chain.getHeadState(), state).state : state,
34
+ state: state instanceof Uint8Array ? chain.getHeadState().loadOtherState(state) : state,
43
35
  executionOptimistic,
44
36
  finalized,
45
37
  };
@@ -71,7 +63,7 @@ export function getBeaconStateApi({
71
63
  throw new ApiError(400, "Requested epoch is out of range");
72
64
  }
73
65
 
74
- const randao = getRandaoMix(state, usedEpoch);
66
+ const randao = state.getRandaoMix(usedEpoch);
75
67
 
76
68
  return {
77
69
  data: {randao},
@@ -94,7 +86,6 @@ export function getBeaconStateApi({
94
86
  async getStateValidators({stateId, validatorIds = [], statuses = []}) {
95
87
  const {state, executionOptimistic, finalized} = await getState(stateId);
96
88
  const currentEpoch = getCurrentEpoch(state);
97
- const {validators, balances} = state; // Get the validators sub tree once for all the loop
98
89
  const {pubkeyCache} = chain;
99
90
 
100
91
  const validatorResponses: routes.beacon.ValidatorResponse[] = [];
@@ -105,14 +96,14 @@ export function getBeaconStateApi({
105
96
  const resp = getStateValidatorIndex(id, state, pubkeyCache);
106
97
  if (resp.valid) {
107
98
  const validatorIndex = resp.validatorIndex;
108
- const validator = validators.getReadonly(validatorIndex);
99
+ const validator = state.getValidator(validatorIndex);
109
100
  if (statuses.length && !statuses.includes(getValidatorStatus(validator, currentEpoch))) {
110
101
  continue;
111
102
  }
112
103
  const validatorResponse = toValidatorResponse(
113
104
  validatorIndex,
114
105
  validator,
115
- balances.get(validatorIndex),
106
+ state.getBalance(validatorIndex),
116
107
  currentEpoch
117
108
  );
118
109
  validatorResponses.push(validatorResponse);
@@ -135,8 +126,8 @@ export function getBeaconStateApi({
135
126
  }
136
127
 
137
128
  // TODO: This loops over the entire state, it's a DOS vector
138
- const validatorsArr = state.validators.getAllReadonlyValues();
139
- const balancesArr = state.balances.getAll();
129
+ const validatorsArr = state.getAllValidators();
130
+ const balancesArr = state.getAllBalances();
140
131
  const resp: routes.beacon.ValidatorResponse[] = [];
141
132
  for (let i = 0; i < validatorsArr.length; i++) {
142
133
  resp.push(toValidatorResponse(i, validatorsArr[i], balancesArr[i], currentEpoch));
@@ -166,12 +157,12 @@ export function getBeaconStateApi({
166
157
  const resp = getStateValidatorIndex(id, state, pubkeyCache);
167
158
  if (resp.valid) {
168
159
  const index = resp.validatorIndex;
169
- const {pubkey, activationEpoch} = state.validators.getReadonly(index);
160
+ const {pubkey, activationEpoch} = state.getValidator(index);
170
161
  validatorIdentities.push({index, pubkey, activationEpoch});
171
162
  }
172
163
  }
173
164
  } else {
174
- const validatorsArr = state.validators.getAllReadonlyValues();
165
+ const validatorsArr = state.getAllValidators();
175
166
  validatorIdentities = new Array(validatorsArr.length) as routes.beacon.ValidatorIdentities;
176
167
  for (let i = 0; i < validatorsArr.length; i++) {
177
168
  const {pubkey, activationEpoch} = validatorsArr[i];
@@ -198,8 +189,8 @@ export function getBeaconStateApi({
198
189
  return {
199
190
  data: toValidatorResponse(
200
191
  validatorIndex,
201
- state.validators.getReadonly(validatorIndex),
202
- state.balances.get(validatorIndex),
192
+ state.getValidator(validatorIndex),
193
+ state.getBalance(validatorIndex),
203
194
  getCurrentEpoch(state)
204
195
  ),
205
196
  meta: {executionOptimistic, finalized},
@@ -219,7 +210,7 @@ export function getBeaconStateApi({
219
210
  if (resp.valid) {
220
211
  balances.push({
221
212
  index: resp.validatorIndex,
222
- balance: state.balances.get(resp.validatorIndex),
213
+ balance: state.getBalance(resp.validatorIndex),
223
214
  });
224
215
  }
225
216
  }
@@ -230,7 +221,7 @@ export function getBeaconStateApi({
230
221
  }
231
222
 
232
223
  // TODO: This loops over the entire state, it's a DOS vector
233
- const balancesArr = state.balances.getAll();
224
+ const balancesArr = state.getAllBalances();
234
225
  const resp: routes.beacon.ValidatorBalance[] = [];
235
226
  for (let i = 0; i < balancesArr.length; i++) {
236
227
  resp.push({index: i, balance: balancesArr[i]});
@@ -248,11 +239,6 @@ export function getBeaconStateApi({
248
239
  async getEpochCommittees({stateId, ...filters}) {
249
240
  const {state, executionOptimistic, finalized} = await getState(stateId);
250
241
 
251
- const stateCached = state as CachedBeaconStateAltair;
252
- if (stateCached.epochCtx === undefined) {
253
- throw new ApiError(400, `No cached state available for stateId: ${stateId}`);
254
- }
255
-
256
242
  const stateEpoch = computeEpochAtSlot(state.slot);
257
243
  const epoch = filters.epoch ?? stateEpoch;
258
244
  const startSlot = computeStartSlotAtEpoch(epoch);
@@ -266,7 +252,7 @@ export function getBeaconStateApi({
266
252
  throw new ApiError(400, `Slot ${filters.slot} is not in epoch ${epoch}`);
267
253
  }
268
254
 
269
- const decisionRoot = stateCached.epochCtx.getShufflingDecisionRoot(epoch);
255
+ const decisionRoot = state.getShufflingDecisionRoot(epoch);
270
256
  const shuffling = await chain.shufflingCache.get(epoch, decisionRoot);
271
257
  if (!shuffling) {
272
258
  throw new ApiError(
@@ -314,13 +300,11 @@ export function getBeaconStateApi({
314
300
  if (stateEpoch < config.ALTAIR_FORK_EPOCH) {
315
301
  throw new ApiError(400, "Requested state before ALTAIR_FORK_EPOCH");
316
302
  }
317
-
318
- const stateCached = state as CachedBeaconStateAltair;
319
- if (stateCached.epochCtx === undefined) {
320
- throw new ApiError(400, `No cached state available for stateId: ${stateId}`);
303
+ if (!isStatePostAltair(state)) {
304
+ throw new Error("Expected Altair state for sync committee lookup");
321
305
  }
322
306
 
323
- const syncCommitteeCache = stateCached.epochCtx.getIndexedSyncCommitteeAtEpoch(epoch ?? stateEpoch);
307
+ const syncCommitteeCache = state.getIndexedSyncCommitteeAtEpoch(epoch ?? stateEpoch);
324
308
  const validatorIndices = new Array<ValidatorIndex>(...syncCommitteeCache.validatorIndices);
325
309
 
326
310
  // Subcommittee assignments of the current sync committee
@@ -340,64 +324,68 @@ export function getBeaconStateApi({
340
324
 
341
325
  async getPendingDeposits({stateId}, context) {
342
326
  const {state, executionOptimistic, finalized} = await getState(stateId);
343
- const fork = config.getForkName(state.slot);
327
+ const fork = state.forkName;
344
328
 
345
- if (!isForkPostElectra(fork)) {
329
+ if (!isStatePostElectra(state)) {
346
330
  throw new ApiError(400, `Cannot retrieve pending deposits for pre-electra state fork=${fork}`);
347
331
  }
348
332
 
349
- const {pendingDeposits} = state as BeaconStateElectra;
333
+ const pendingDeposits = state.pendingDeposits;
350
334
 
351
335
  return {
352
- data: context?.returnBytes ? pendingDeposits.serialize() : pendingDeposits.toValue(),
336
+ data: context?.returnBytes ? ssz.electra.PendingDeposits.serialize(pendingDeposits) : pendingDeposits,
353
337
  meta: {executionOptimistic, finalized, version: fork},
354
338
  };
355
339
  },
356
340
 
357
341
  async getPendingPartialWithdrawals({stateId}, context) {
358
342
  const {state, executionOptimistic, finalized} = await getState(stateId);
359
- const fork = config.getForkName(state.slot);
343
+ const fork = state.forkName;
360
344
 
361
- if (!isForkPostElectra(fork)) {
345
+ if (!isStatePostElectra(state)) {
362
346
  throw new ApiError(400, `Cannot retrieve pending partial withdrawals for pre-electra state fork=${fork}`);
363
347
  }
364
348
 
365
- const {pendingPartialWithdrawals} = state as BeaconStateElectra;
349
+ const pendingPartialWithdrawals = state.pendingPartialWithdrawals;
366
350
 
367
351
  return {
368
- data: context?.returnBytes ? pendingPartialWithdrawals.serialize() : pendingPartialWithdrawals.toValue(),
352
+ data: context?.returnBytes
353
+ ? ssz.electra.PendingPartialWithdrawals.serialize(pendingPartialWithdrawals)
354
+ : pendingPartialWithdrawals,
369
355
  meta: {executionOptimistic, finalized, version: fork},
370
356
  };
371
357
  },
372
358
 
373
359
  async getPendingConsolidations({stateId}, context) {
374
360
  const {state, executionOptimistic, finalized} = await getState(stateId);
375
- const fork = config.getForkName(state.slot);
361
+ const fork = state.forkName;
376
362
 
377
- if (!isForkPostElectra(fork)) {
363
+ if (!isStatePostElectra(state)) {
378
364
  throw new ApiError(400, `Cannot retrieve pending consolidations for pre-electra state fork=${fork}`);
379
365
  }
380
366
 
381
- const {pendingConsolidations} = state as BeaconStateElectra;
367
+ const pendingConsolidations = state.pendingConsolidations;
382
368
 
383
369
  return {
384
- data: context?.returnBytes ? pendingConsolidations.serialize() : pendingConsolidations.toValue(),
370
+ data: context?.returnBytes
371
+ ? ssz.electra.PendingConsolidations.serialize(pendingConsolidations)
372
+ : pendingConsolidations,
385
373
  meta: {executionOptimistic, finalized, version: fork},
386
374
  };
387
375
  },
388
376
 
389
377
  async getProposerLookahead({stateId}, context) {
390
378
  const {state, executionOptimistic, finalized} = await getState(stateId);
391
- const fork = config.getForkName(state.slot);
379
+ const fork = state.forkName;
392
380
 
393
- if (!isForkPostFulu(fork)) {
381
+ if (!isStatePostFulu(state)) {
394
382
  throw new ApiError(400, `Cannot retrieve proposer lookahead for pre-fulu state fork=${fork}`);
395
383
  }
396
384
 
397
- const {proposerLookahead} = state as BeaconStateFulu;
385
+ const proposerLookahead = state.proposerLookahead;
398
386
 
399
387
  return {
400
- data: context?.returnBytes ? proposerLookahead.serialize() : proposerLookahead.toValue(),
388
+ data: context?.returnBytes ? ssz.fulu.ProposerLookahead.serialize(proposerLookahead) : proposerLookahead,
401
389
  meta: {executionOptimistic, finalized, version: fork},
402
390
  };
403
391
  },
@@ -1,17 +1,8 @@
1
1
  import {routes} from "@lodestar/api";
2
2
  import {CheckpointWithPayloadStatus, IForkChoice} from "@lodestar/fork-choice";
3
3
  import {GENESIS_SLOT} from "@lodestar/params";
4
- import {BeaconStateAllForks, CachedBeaconStateAllForks, PubkeyCache} from "@lodestar/state-transition";
5
- import {
6
- BLSPubkey,
7
- Epoch,
8
- RootHex,
9
- Slot,
10
- ValidatorIndex,
11
- getValidatorStatus,
12
- mapToGeneralStatus,
13
- phase0,
14
- } from "@lodestar/types";
4
+ import {IBeaconStateView, PubkeyCache} from "@lodestar/state-transition";
5
+ import {BLSPubkey, Epoch, RootHex, Slot, ValidatorIndex, getValidatorStatus, phase0} from "@lodestar/types";
15
6
  import {fromHex} from "@lodestar/utils";
16
7
  import {IBeaconChain} from "../../../../chain/index.js";
17
8
  import {ApiError, ValidationError} from "../../errors.js";
@@ -52,7 +43,7 @@ export function resolveStateId(
52
43
  export async function getStateResponseWithRegen(
53
44
  chain: IBeaconChain,
54
45
  inStateId: routes.beacon.StateId
55
- ): Promise<{state: CachedBeaconStateAllForks | Uint8Array; executionOptimistic: boolean; finalized: boolean}> {
46
+ ): Promise<{state: IBeaconStateView | Uint8Array; executionOptimistic: boolean; finalized: boolean}> {
56
47
  const stateId = resolveStateId(chain.forkChoice, inStateId);
57
48
 
58
49
  const res =
@@ -89,22 +80,17 @@ export function toValidatorResponse(
89
80
 
90
81
  export function filterStateValidatorsByStatus(
91
82
  statuses: string[],
92
- state: BeaconStateAllForks,
83
+ state: IBeaconStateView,
93
84
  pubkeyCache: PubkeyCache,
94
85
  currentEpoch: Epoch
95
86
  ): routes.beacon.ValidatorResponse[] {
96
87
  const responses: routes.beacon.ValidatorResponse[] = [];
97
- const validatorsArr = state.validators.getAllReadonlyValues();
98
- const statusSet = new Set(statuses);
99
-
100
- for (const validator of validatorsArr) {
101
- const validatorStatus = getValidatorStatus(validator, currentEpoch);
102
- const generalStatus = mapToGeneralStatus(validatorStatus);
103
-
88
+ const validators = state.getValidatorsByStatus(new Set(statuses), currentEpoch);
89
+ for (const validator of validators) {
104
90
  const resp = getStateValidatorIndex(validator.pubkey, state, pubkeyCache);
105
- if (resp.valid && (statusSet.has(validatorStatus) || statusSet.has(generalStatus))) {
91
+ if (resp.valid) {
106
92
  responses.push(
107
- toValidatorResponse(resp.validatorIndex, validator, state.balances.get(resp.validatorIndex), currentEpoch)
93
+ toValidatorResponse(resp.validatorIndex, validator, state.getBalance(resp.validatorIndex), currentEpoch)
108
94
  );
109
95
  }
110
96
  }
@@ -117,7 +103,7 @@ type StateValidatorIndexResponse =
117
103
 
118
104
  export function getStateValidatorIndex(
119
105
  id: routes.beacon.ValidatorId | BLSPubkey,
120
- state: BeaconStateAllForks,
106
+ state: IBeaconStateView,
121
107
  pubkeyCache: PubkeyCache
122
108
  ): StateValidatorIndexResponse {
123
109
  if (typeof id === "string") {
@@ -139,7 +125,7 @@ export function getStateValidatorIndex(
139
125
  if (!Number.isSafeInteger(validatorIndex)) {
140
126
  return {valid: false, code: 400, reason: "Invalid validator index"};
141
127
  }
142
- if (validatorIndex >= state.validators.length) {
128
+ if (validatorIndex >= state.validatorCount) {
143
129
  return {valid: false, code: 404, reason: "Validator index from future state"};
144
130
  }
145
131
  return {valid: true, validatorIndex};
@@ -150,7 +136,7 @@ export function getStateValidatorIndex(
150
136
  if (validatorIndex === null) {
151
137
  return {valid: false, code: 404, reason: "Validator pubkey not found in state"};
152
138
  }
153
- if (validatorIndex >= state.validators.length) {
139
+ if (validatorIndex >= state.validatorCount) {
154
140
  return {valid: false, code: 404, reason: "Validator pubkey from future state"};
155
141
  }
156
142
  return {valid: true, validatorIndex};
@@ -2,7 +2,7 @@ import {routes} from "@lodestar/api";
2
2
  import {ApplicationMethods} from "@lodestar/api/server";
3
3
  import {ExecutionStatus} from "@lodestar/fork-choice";
4
4
  import {ForkPostDeneb, ZERO_HASH_HEX, isForkPostDeneb, isForkPostFulu} from "@lodestar/params";
5
- import {BeaconState, DataColumnSidecars, type SignedBeaconBlock, sszTypesFor} from "@lodestar/types";
5
+ import {BeaconState, DataColumnSidecar, DataColumnSidecars, type SignedBeaconBlock, sszTypesFor} from "@lodestar/types";
6
6
  import {toRootHex} from "@lodestar/utils";
7
7
  import {getBlobKzgCommitments} from "../../../util/dataColumns.js";
8
8
  import {isOptimisticBlock} from "../../../util/forkChoice.js";
@@ -98,7 +98,7 @@ export function getDebugApi({
98
98
  const fork = config.getForkName(block.message.slot);
99
99
  const blockRoot = sszTypesFor(fork).BeaconBlock.hashTreeRoot(block.message);
100
100
 
101
- let dataColumnSidecars: DataColumnSidecars;
101
+ let dataColumnSidecars: DataColumnSidecar[];
102
102
 
103
103
  const blobCount = isForkPostDeneb(fork)
104
104
  ? getBlobKzgCommitments(fork, block as SignedBeaconBlock<ForkPostDeneb>).length
@@ -1,10 +1,9 @@
1
- import {Tree} from "@chainsafe/persistent-merkle-tree";
2
1
  import {routes} from "@lodestar/api";
3
2
  import {ApplicationMethods} from "@lodestar/api/server";
4
3
  import {ChainForkConfig} from "@lodestar/config";
5
4
  import {Repository} from "@lodestar/db";
6
5
  import {ForkSeq, SLOTS_PER_EPOCH} from "@lodestar/params";
7
- import {BeaconStateCapella, getLatestWeakSubjectivityCheckpointEpoch, loadState} from "@lodestar/state-transition";
6
+ import {isStatePostCapella} from "@lodestar/state-transition";
8
7
  import {ssz} from "@lodestar/types";
9
8
  import {Checkpoint} from "@lodestar/types/phase0";
10
9
  import {fromHex, toHex, toRootHex} from "@lodestar/utils";
@@ -86,7 +85,7 @@ export function getLodestarApi({
86
85
 
87
86
  async getLatestWeakSubjectivityCheckpointEpoch() {
88
87
  const state = chain.getHeadState();
89
- return {data: getLatestWeakSubjectivityCheckpointEpoch(config, state)};
88
+ return {data: state.getLatestWeakSubjectivityCheckpointEpoch()};
90
89
  },
91
90
 
92
91
  async getSyncChainsDebugState() {
@@ -214,22 +213,23 @@ export function getLodestarApi({
214
213
  async getHistoricalSummaries({stateId}) {
215
214
  const {state, executionOptimistic, finalized} = await getStateResponseWithRegen(chain, stateId);
216
215
 
217
- const stateView = (
218
- state instanceof Uint8Array ? loadState(config, chain.getHeadState(), state).state : state
219
- ) as BeaconStateCapella;
216
+ const stateView = state instanceof Uint8Array ? chain.getHeadState().loadOtherState(state) : state;
220
217
 
221
218
  const fork = config.getForkName(stateView.slot);
222
219
  if (ForkSeq[fork] < ForkSeq.capella) {
223
220
  throw new Error("Historical summaries are not supported before Capella");
224
221
  }
222
+ if (!isStatePostCapella(stateView)) {
223
+ throw new Error("Expected Capella state for historical summaries");
224
+ }
225
225
 
226
226
  const {gindex} = ssz[fork].BeaconState.getPathInfo(["historicalSummaries"]);
227
- const proof = new Tree(stateView.node).getSingleProof(gindex);
227
+ const proof = stateView.getSingleProof(gindex);
228
228
 
229
229
  return {
230
230
  data: {
231
231
  slot: stateView.slot,
232
- historicalSummaries: stateView.historicalSummaries.toValue(),
232
+ historicalSummaries: stateView.historicalSummaries,
233
233
  proof: proof,
234
234
  },
235
235
  meta: {executionOptimistic, finalized, version: fork},
@@ -1,7 +1,6 @@
1
1
  import {CompactMultiProof, ProofType, createProof} from "@chainsafe/persistent-merkle-tree";
2
2
  import {routes} from "@lodestar/api";
3
3
  import {ApplicationMethods} from "@lodestar/api/server";
4
- import {loadState} from "@lodestar/state-transition";
5
4
  import {ApiOptions} from "../../options.js";
6
5
  import {getBlockResponse} from "../beacon/blocks/utils.js";
7
6
  import {getStateResponseWithRegen} from "../beacon/state/utils.js";
@@ -24,16 +23,10 @@ export function getProofApi(
24
23
 
25
24
  const res = await getStateResponseWithRegen(chain, stateId);
26
25
 
27
- const state =
28
- res.state instanceof Uint8Array ? loadState(config, chain.getHeadState(), res.state).state : res.state;
29
-
30
- // there should be no state changes in beacon-node so no need to commit() here
31
- const stateNode = state.node;
32
-
33
- const proof = createProof(stateNode, {type: ProofType.compactMulti, descriptor});
26
+ const state = res.state instanceof Uint8Array ? chain.getHeadState().loadOtherState(res.state) : res.state;
34
27
 
35
28
  return {
36
- data: proof as CompactMultiProof,
29
+ data: state.createMultiProof(descriptor),
37
30
  meta: {version: config.getForkName(state.slot)},
38
31
  };
39
32
  },
@@ -17,19 +17,15 @@ import {
17
17
  isForkPostGloas,
18
18
  } from "@lodestar/params";
19
19
  import {
20
- CachedBeaconStateAllForks,
21
20
  DataAvailabilityStatus,
22
- attesterShufflingDecisionRoot,
21
+ IBeaconStateView,
23
22
  beaconBlockToBlinded,
24
23
  calculateCommitteeAssignments,
25
24
  computeEpochAtSlot,
26
25
  computeStartSlotAtEpoch,
27
26
  computeTimeAtSlot,
28
- createCachedBeaconState,
29
- createPubkeyCache,
30
- getBlockRootAtSlot,
31
27
  getCurrentSlot,
32
- loadState,
28
+ isStatePostAltair,
33
29
  proposerShufflingDecisionRoot,
34
30
  } from "@lodestar/state-transition";
35
31
  import {
@@ -193,11 +189,13 @@ export function getValidatorApi(
193
189
  const MAX_API_CLOCK_DISPARITY_MS = MAX_API_CLOCK_DISPARITY_SEC * 1000;
194
190
 
195
191
  /** Compute and cache the genesis block root */
196
- async function getGenesisBlockRoot(state: CachedBeaconStateAllForks): Promise<Root> {
192
+ async function getGenesisBlockRoot(state: IBeaconStateView): Promise<Root> {
197
193
  if (!genesisBlockRoot) {
198
194
  // Close to genesis the genesis block may not be available in the DB
199
- if (state.slot < SLOTS_PER_HISTORICAL_ROOT) {
200
- genesisBlockRoot = state.blockRoots.get(0);
195
+ if (state.slot === GENESIS_SLOT) {
196
+ genesisBlockRoot = state.computeAnchorCheckpoint().checkpoint.root;
197
+ } else if (state.slot < SLOTS_PER_HISTORICAL_ROOT) {
198
+ genesisBlockRoot = state.getBlockRootAtSlot(GENESIS_SLOT);
201
199
  }
202
200
 
203
201
  const blockRes = await chain.getCanonicalBlockAtSlot(GENESIS_SLOT);
@@ -303,7 +301,7 @@ export function getValidatorApi(
303
301
  * |
304
302
  * prepareNextSlot (4s before next slot)
305
303
  */
306
- async function waitForCheckpointState(cpHex: CheckpointHexPayload): Promise<CachedBeaconStateAllForks | null> {
304
+ async function waitForCheckpointState(cpHex: CheckpointHexPayload): Promise<IBeaconStateView | null> {
307
305
  const cpState = chain.regen.getCheckpointStateSync(cpHex);
308
306
  if (cpState) {
309
307
  return cpState;
@@ -995,7 +993,7 @@ export function getValidatorApi(
995
993
  headBlockRoot
996
994
  : // Permit attesting to slots *prior* to the current head. This is desirable when
997
995
  // the VC and BN are out-of-sync due to time issues or overloading.
998
- getBlockRootAtSlot(headState, slot);
996
+ headState.getBlockRootAtSlot(slot);
999
997
 
1000
998
  let index: CommitteeIndex;
1001
999
  if (isForkPostGloas(fork)) {
@@ -1026,7 +1024,7 @@ export function getValidatorApi(
1026
1024
  targetSlot >= headSlot
1027
1025
  ? // If the state is earlier than the target slot then the target *must* be the head block root.
1028
1026
  headBlockRoot
1029
- : getBlockRootAtSlot(headState, targetSlot);
1027
+ : headState.getBlockRootAtSlot(targetSlot);
1030
1028
 
1031
1029
  // Check the execution status as validator shouldn't vote on an optimistic head
1032
1030
  // Check on target is sufficient as a valid target would imply a valid source
@@ -1068,7 +1066,7 @@ export function getValidatorApi(
1068
1066
  // see https://github.com/ChainSafe/lodestar/issues/5063
1069
1067
  if (!chain.forkChoice.hasBlock(beaconBlockRoot)) {
1070
1068
  const rootHex = toRootHex(beaconBlockRoot);
1071
- network.searchUnknownSlotRoot({slot, root: rootHex}, BlockInputSource.api);
1069
+ network.searchUnknownBlock({slot, root: rootHex}, BlockInputSource.api);
1072
1070
  // if result of this call is false, i.e. block hasn't seen after 1 slot then the below notOnOptimisticBlockRoot call will throw error
1073
1071
  await chain.waitForBlock(slot, rootHex);
1074
1072
  }
@@ -1103,7 +1101,7 @@ export function getValidatorApi(
1103
1101
  }
1104
1102
 
1105
1103
  const head = chain.forkChoice.getHead();
1106
- let state: CachedBeaconStateAllForks | undefined = undefined;
1104
+ let state: IBeaconStateView | undefined = undefined;
1107
1105
  const startSlot = computeStartSlotAtEpoch(epoch);
1108
1106
  const prepareNextSlotLookAheadMs =
1109
1107
  config.SLOT_DURATION_MS - config.getSlotComponentDurationMs(PREPARE_NEXT_SLOT_BPS);
@@ -1133,43 +1131,34 @@ export function getValidatorApi(
1133
1131
  } else {
1134
1132
  const res = await getStateResponseWithRegen(chain, startSlot);
1135
1133
 
1136
- const stateViewDU =
1137
- res.state instanceof Uint8Array ? loadState(config, chain.getHeadState(), res.state).state : res.state;
1134
+ state = res.state instanceof Uint8Array ? chain.getHeadState().loadOtherState(res.state) : res.state;
1138
1135
 
1139
- state = createCachedBeaconState(
1140
- stateViewDU,
1141
- {
1142
- config: chain.config,
1143
- // Not required to compute proposers
1144
- pubkeyCache: createPubkeyCache(),
1145
- },
1146
- {skipSyncPubkeys: true, skipSyncCommitteeCache: true}
1147
- );
1148
-
1149
- if (state.epochCtx.epoch !== epoch) {
1150
- throw Error(`Loaded state epoch ${state.epochCtx.epoch} does not match requested epoch ${epoch}`);
1136
+ if (state.epoch !== epoch) {
1137
+ throw Error(`Loaded state epoch ${state.epoch} does not match requested epoch ${epoch}`);
1151
1138
  }
1152
1139
  }
1153
1140
  }
1154
1141
 
1155
- const stateEpoch = state.epochCtx.epoch;
1142
+ const stateEpoch = state.epoch;
1156
1143
  let indexes: ValidatorIndex[] = [];
1157
1144
 
1158
1145
  switch (epoch) {
1159
1146
  case stateEpoch:
1160
- indexes = state.epochCtx.getBeaconProposers();
1147
+ indexes = state.currentProposers;
1161
1148
  break;
1162
1149
 
1163
- case stateEpoch + 1:
1150
+ case stateEpoch + 1: {
1164
1151
  // make sure shuffling is calculated and ready for next call to calculate nextProposers
1165
- await chain.shufflingCache.get(state.epochCtx.nextEpoch, state.epochCtx.nextDecisionRoot);
1152
+ const nextEpoch = state.epoch + 1;
1153
+ await chain.shufflingCache.get(nextEpoch, state.nextDecisionRoot);
1166
1154
  // Requesting duties for next epoch is allowed since they can be predicted with high probabilities.
1167
1155
  // @see `epochCtx.getBeaconProposersNextEpoch` JSDocs for rationale.
1168
- indexes = state.epochCtx.getBeaconProposersNextEpoch();
1156
+ indexes = state.nextProposers;
1169
1157
  break;
1158
+ }
1170
1159
 
1171
1160
  case stateEpoch - 1: {
1172
- const indexesPrevEpoch = state.epochCtx.getBeaconProposersPrevEpoch();
1161
+ const indexesPrevEpoch = state.previousProposers;
1173
1162
  if (indexesPrevEpoch === null) {
1174
1163
  // Should not happen as previous proposer duties should be initialized for head state
1175
1164
  // and if we load state from `Uint8Array` it will always be the state of requested epoch
@@ -1188,7 +1177,7 @@ export function getValidatorApi(
1188
1177
  // See benchmark -> packages/lodestar/test/perf/api/impl/validator/attester.test.ts
1189
1178
  // After dropping the flat caches attached to the CachedBeaconState it's no longer available.
1190
1179
  // TODO: Add a flag to just send 0x00 as pubkeys since the Lodestar validator does not need them.
1191
- const pubkeys = getPubkeysForIndices(state.validators, indexes);
1180
+ const pubkeys = getPubkeysForIndices(state, indexes);
1192
1181
 
1193
1182
  const duties: routes.validator.ProposerDuty[] = [];
1194
1183
  for (let i = 0; i < SLOTS_PER_EPOCH; i++) {
@@ -1242,8 +1231,8 @@ export function getValidatorApi(
1242
1231
  // will equal `currentEpoch + 1`
1243
1232
 
1244
1233
  // Check that all validatorIndex belong to the state before calling getCommitteeAssignments()
1245
- const pubkeys = getPubkeysForIndices(state.validators, indices);
1246
- const decisionRoot = state.epochCtx.getShufflingDecisionRoot(epoch);
1234
+ const pubkeys = getPubkeysForIndices(state, indices);
1235
+ const decisionRoot = state.getShufflingDecisionRoot(epoch);
1247
1236
  const shuffling = await chain.shufflingCache.get(epoch, decisionRoot);
1248
1237
  if (!shuffling) {
1249
1238
  throw new ApiError(
@@ -1264,7 +1253,7 @@ export function getValidatorApi(
1264
1253
  }
1265
1254
  }
1266
1255
 
1267
- const dependentRoot = attesterShufflingDecisionRoot(state, epoch) || (await getGenesisBlockRoot(state));
1256
+ const dependentRoot = fromHex(state.getShufflingDecisionRoot(epoch)) || (await getGenesisBlockRoot(state));
1268
1257
 
1269
1258
  return {
1270
1259
  data: duties,
@@ -1294,6 +1283,9 @@ export function getValidatorApi(
1294
1283
  if (indices.length === 0) {
1295
1284
  throw new ApiError(400, "No validator to get attester duties");
1296
1285
  }
1286
+ if (epoch < config.ALTAIR_FORK_EPOCH) {
1287
+ throw new ApiError(400, "Sync committee duties are not supported before Altair");
1288
+ }
1297
1289
 
1298
1290
  // May request for an epoch that's in the future
1299
1291
  await waitForNextClosestEpoch();
@@ -1303,11 +1295,14 @@ export function getValidatorApi(
1303
1295
  // Note: does not support requesting past duties
1304
1296
  const head = chain.forkChoice.getHead();
1305
1297
  const state = chain.getHeadState();
1298
+ if (!isStatePostAltair(state)) {
1299
+ throw new ApiError(400, "Sync committee duties are not available before Altair");
1300
+ }
1306
1301
 
1307
1302
  // Check that all validatorIndex belong to the state before calling getCommitteeAssignments()
1308
- const pubkeys = getPubkeysForIndices(state.validators, indices);
1303
+ const pubkeys = getPubkeysForIndices(state, indices);
1309
1304
  // Ensures `epoch // EPOCHS_PER_SYNC_COMMITTEE_PERIOD <= current_epoch // EPOCHS_PER_SYNC_COMMITTEE_PERIOD + 1`
1310
- const syncCommitteeCache = state.epochCtx.getIndexedSyncCommitteeAtEpoch(epoch);
1305
+ const syncCommitteeCache = state.getIndexedSyncCommitteeAtEpoch(epoch);
1311
1306
  const validatorSyncCommitteeIndexMap = syncCommitteeCache.validatorIndexMap;
1312
1307
 
1313
1308
  const duties: routes.validator.SyncDuty[] = [];
@@ -1605,7 +1600,7 @@ export function getValidatorApi(
1605
1600
  const validatorIndex = chain.pubkeyCache.getIndex(pubkey);
1606
1601
  if (validatorIndex === null) return false;
1607
1602
 
1608
- const validator = headState.validators.getReadonly(validatorIndex);
1603
+ const validator = headState.getValidator(validatorIndex);
1609
1604
  const status = getValidatorStatus(validator, currentEpoch);
1610
1605
  return (
1611
1606
  status === "active_exiting" ||
@@ -1,6 +1,6 @@
1
1
  import {routes} from "@lodestar/api";
2
2
  import {ATTESTATION_SUBNET_COUNT} from "@lodestar/params";
3
- import {BeaconStateAllForks, computeSlotsSinceEpochStart} from "@lodestar/state-transition";
3
+ import {IBeaconStateView, computeSlotsSinceEpochStart} from "@lodestar/state-transition";
4
4
  import {BLSPubkey, CommitteeIndex, ProducedBlockSource, Slot, SubnetID, ValidatorIndex} from "@lodestar/types";
5
5
  import {MAX_BUILDER_BOOST_FACTOR} from "@lodestar/validator";
6
6
  import {BlockSelectionResult, BuilderBlockSelectionReason, EngineBlockSelectionReason} from "./index.js";
@@ -24,11 +24,8 @@ export function computeSubnetForCommitteesAtSlot(
24
24
  * Note: This is the fastest way of getting compressed pubkeys.
25
25
  * See benchmark -> packages/beacon-node/test/perf/api/impl/validator/attester.test.ts
26
26
  */
27
- export function getPubkeysForIndices(
28
- validators: BeaconStateAllForks["validators"],
29
- indexes: ValidatorIndex[]
30
- ): BLSPubkey[] {
31
- const validatorsLen = validators.length; // Get once, it's expensive
27
+ export function getPubkeysForIndices(state: IBeaconStateView, indexes: ValidatorIndex[]): BLSPubkey[] {
28
+ const validatorsLen = state.validatorCount; // Get once, it's expensive
32
29
 
33
30
  const pubkeys: BLSPubkey[] = [];
34
31
  for (let i = 0, len = indexes.length; i < len; i++) {
@@ -38,7 +35,7 @@ export function getPubkeysForIndices(
38
35
  }
39
36
 
40
37
  // NOTE: This could be optimized further by traversing the tree optimally with .getNodes()
41
- const validator = validators.getReadonly(index);
38
+ const validator = state.getValidator(index);
42
39
  pubkeys.push(validator.pubkey);
43
40
  }
44
41