@lodestar/beacon-node 1.42.0-dev.4118b5b440 → 1.42.0-dev.47afaa6bb7

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 (463) 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 +34 -28
  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 +4 -4
  62. package/lib/chain/blocks/blockInput/types.d.ts.map +1 -1
  63. package/lib/chain/blocks/importBlock.d.ts +3 -3
  64. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  65. package/lib/chain/blocks/importBlock.js +37 -23
  66. package/lib/chain/blocks/importBlock.js.map +1 -1
  67. package/lib/chain/blocks/importExecutionPayload.d.ts +10 -8
  68. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  69. package/lib/chain/blocks/importExecutionPayload.js +87 -51
  70. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  71. package/lib/chain/blocks/index.d.ts.map +1 -1
  72. package/lib/chain/blocks/index.js +3 -2
  73. package/lib/chain/blocks/index.js.map +1 -1
  74. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +14 -6
  75. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -1
  76. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +33 -2
  77. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -1
  78. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +2 -1
  79. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -1
  80. package/lib/chain/blocks/types.d.ts +21 -15
  81. package/lib/chain/blocks/types.d.ts.map +1 -1
  82. package/lib/chain/blocks/types.js.map +1 -1
  83. package/lib/chain/blocks/utils/checkpoint.d.ts +2 -2
  84. package/lib/chain/blocks/utils/checkpoint.d.ts.map +1 -1
  85. package/lib/chain/blocks/utils/checkpoint.js.map +1 -1
  86. package/lib/chain/blocks/verifyBlock.d.ts +2 -2
  87. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  88. package/lib/chain/blocks/verifyBlock.js +4 -4
  89. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  90. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +5 -5
  91. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  92. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +5 -4
  93. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  94. package/lib/chain/blocks/verifyBlocksSignatures.d.ts +2 -2
  95. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  96. package/lib/chain/blocks/verifyBlocksSignatures.js +4 -2
  97. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  98. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts +3 -3
  99. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +1 -1
  100. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js +3 -3
  101. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
  102. package/lib/chain/chain.d.ts +15 -14
  103. package/lib/chain/chain.d.ts.map +1 -1
  104. package/lib/chain/chain.js +114 -66
  105. package/lib/chain/chain.js.map +1 -1
  106. package/lib/chain/emitter.d.ts +31 -9
  107. package/lib/chain/emitter.d.ts.map +1 -1
  108. package/lib/chain/emitter.js +12 -3
  109. package/lib/chain/emitter.js.map +1 -1
  110. package/lib/chain/errors/blockError.d.ts +10 -5
  111. package/lib/chain/errors/blockError.d.ts.map +1 -1
  112. package/lib/chain/errors/blockError.js +2 -0
  113. package/lib/chain/errors/blockError.js.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 +9 -10
  159. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  160. package/lib/chain/produceBlock/produceBlockBody.d.ts +7 -7
  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 +15 -6
  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 +20 -0
  264. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  265. package/lib/metrics/metrics/lodestar.js +33 -0
  266. package/lib/metrics/metrics/lodestar.js.map +1 -1
  267. package/lib/network/interface.d.ts +6 -3
  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 +6 -3
  273. package/lib/network/network.d.ts.map +1 -1
  274. package/lib/network/network.js +10 -1
  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 +260 -73
  285. package/lib/network/processor/gossipHandlers.js.map +1 -1
  286. package/lib/network/processor/index.d.ts +11 -1
  287. package/lib/network/processor/index.d.ts.map +1 -1
  288. package/lib/network/processor/index.js +234 -22
  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.js +2 -2
  330. package/lib/sync/unknownBlock.js.map +1 -1
  331. package/lib/sync/utils/downloadByRange.d.ts +3 -3
  332. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  333. package/lib/sync/utils/downloadByRange.js +4 -2
  334. package/lib/sync/utils/downloadByRange.js.map +1 -1
  335. package/lib/sync/utils/downloadByRoot.d.ts +3 -3
  336. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  337. package/lib/sync/utils/downloadByRoot.js +10 -5
  338. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  339. package/lib/util/blobs.d.ts +3 -3
  340. package/lib/util/blobs.d.ts.map +1 -1
  341. package/lib/util/blobs.js +21 -10
  342. package/lib/util/blobs.js.map +1 -1
  343. package/lib/util/dataColumns.d.ts +18 -11
  344. package/lib/util/dataColumns.d.ts.map +1 -1
  345. package/lib/util/dataColumns.js +51 -17
  346. package/lib/util/dataColumns.js.map +1 -1
  347. package/lib/util/execution.d.ts +6 -2
  348. package/lib/util/execution.d.ts.map +1 -1
  349. package/lib/util/execution.js +49 -25
  350. package/lib/util/execution.js.map +1 -1
  351. package/lib/util/sszBytes.d.ts +25 -1
  352. package/lib/util/sszBytes.d.ts.map +1 -1
  353. package/lib/util/sszBytes.js +189 -2
  354. package/lib/util/sszBytes.js.map +1 -1
  355. package/lib/util/types.d.ts +2 -0
  356. package/lib/util/types.d.ts.map +1 -1
  357. package/lib/util/types.js +1 -0
  358. package/lib/util/types.js.map +1 -1
  359. package/package.json +16 -16
  360. package/src/api/impl/beacon/blocks/index.ts +33 -16
  361. package/src/api/impl/beacon/pool/index.ts +5 -1
  362. package/src/api/impl/beacon/state/index.ts +43 -55
  363. package/src/api/impl/beacon/state/utils.ts +11 -25
  364. package/src/api/impl/debug/index.ts +2 -2
  365. package/src/api/impl/lodestar/index.ts +8 -8
  366. package/src/api/impl/proof/index.ts +2 -9
  367. package/src/api/impl/validator/index.ts +37 -42
  368. package/src/api/impl/validator/utils.ts +4 -7
  369. package/src/chain/ColumnReconstructionTracker.ts +6 -5
  370. package/src/chain/GetBlobsTracker.ts +14 -12
  371. package/src/chain/archiveStore/archiveStore.ts +1 -0
  372. package/src/chain/archiveStore/historicalState/getHistoricalState.ts +10 -39
  373. package/src/chain/archiveStore/historicalState/historicalStateRegen.ts +2 -1
  374. package/src/chain/archiveStore/historicalState/types.ts +2 -0
  375. package/src/chain/archiveStore/historicalState/worker.ts +1 -4
  376. package/src/chain/archiveStore/interface.ts +1 -0
  377. package/src/chain/balancesCache.ts +5 -11
  378. package/src/chain/blocks/blockInput/blockInput.ts +8 -8
  379. package/src/chain/blocks/blockInput/types.ts +4 -4
  380. package/src/chain/blocks/importBlock.ts +50 -31
  381. package/src/chain/blocks/importExecutionPayload.ts +98 -62
  382. package/src/chain/blocks/index.ts +3 -2
  383. package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +53 -12
  384. package/src/chain/blocks/payloadEnvelopeInput/types.ts +2 -1
  385. package/src/chain/blocks/types.ts +26 -15
  386. package/src/chain/blocks/utils/checkpoint.ts +2 -2
  387. package/src/chain/blocks/verifyBlock.ts +5 -10
  388. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +10 -14
  389. package/src/chain/blocks/verifyBlocksSignatures.ts +10 -3
  390. package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +6 -8
  391. package/src/chain/chain.ts +151 -98
  392. package/src/chain/emitter.ts +27 -9
  393. package/src/chain/errors/blockError.ts +8 -5
  394. package/src/chain/errors/dataColumnSidecarError.ts +32 -1
  395. package/src/chain/forkChoice/index.ts +35 -41
  396. package/src/chain/initState.ts +7 -2
  397. package/src/chain/interface.ts +16 -15
  398. package/src/chain/lightClient/index.ts +17 -18
  399. package/src/chain/opPools/aggregatedAttestationPool.ts +20 -21
  400. package/src/chain/opPools/executionPayloadBidPool.ts +3 -3
  401. package/src/chain/opPools/opPool.ts +13 -14
  402. package/src/chain/opPools/utils.ts +3 -3
  403. package/src/chain/options.ts +2 -0
  404. package/src/chain/prepareNextSlot.ts +14 -8
  405. package/src/chain/produceBlock/computeNewStateRoot.ts +13 -16
  406. package/src/chain/produceBlock/produceBlockBody.ts +51 -48
  407. package/src/chain/regen/interface.ts +13 -17
  408. package/src/chain/regen/queued.ts +16 -20
  409. package/src/chain/regen/regen.ts +16 -17
  410. package/src/chain/seenCache/seenGossipBlockInput.ts +2 -2
  411. package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +2 -2
  412. package/src/chain/serializeState.ts +3 -3
  413. package/src/chain/shufflingCache.ts +5 -7
  414. package/src/chain/stateCache/fifoBlockStateCache.ts +7 -7
  415. package/src/chain/stateCache/persistentCheckpointsCache.ts +27 -42
  416. package/src/chain/stateCache/types.ts +14 -18
  417. package/src/chain/validation/attesterSlashing.ts +3 -3
  418. package/src/chain/validation/blobSidecar.ts +1 -1
  419. package/src/chain/validation/block.ts +16 -10
  420. package/src/chain/validation/blsToExecutionChange.ts +2 -2
  421. package/src/chain/validation/dataColumnSidecar.ts +231 -8
  422. package/src/chain/validation/executionPayloadBid.ts +10 -10
  423. package/src/chain/validation/executionPayloadEnvelope.ts +7 -4
  424. package/src/chain/validation/payloadAttestationMessage.ts +6 -4
  425. package/src/chain/validation/proposerSlashing.ts +1 -1
  426. package/src/chain/validation/signatureSets/contributionAndProof.ts +2 -7
  427. package/src/chain/validation/signatureSets/syncCommittee.ts +2 -7
  428. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +2 -2
  429. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +2 -7
  430. package/src/chain/validation/syncCommittee.ts +10 -6
  431. package/src/chain/validation/syncCommitteeContributionAndProof.ts +9 -10
  432. package/src/chain/validation/voluntaryExit.ts +3 -8
  433. package/src/chain/validatorMonitor.ts +15 -13
  434. package/src/db/buckets.ts +2 -2
  435. package/src/db/repositories/dataColumnSidecar.ts +4 -2
  436. package/src/db/repositories/dataColumnSidecarArchive.ts +4 -2
  437. package/src/metrics/metrics/lodestar.ts +34 -0
  438. package/src/network/interface.ts +17 -3
  439. package/src/network/libp2p/index.ts +24 -13
  440. package/src/network/network.ts +37 -6
  441. package/src/network/options.ts +7 -2
  442. package/src/network/processor/extractSlotRootFns.ts +32 -6
  443. package/src/network/processor/gossipHandlers.ts +325 -86
  444. package/src/network/processor/index.ts +304 -22
  445. package/src/network/reqresp/ReqRespBeaconNode.ts +13 -0
  446. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRange.ts +94 -0
  447. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRoot.ts +43 -0
  448. package/src/network/reqresp/handlers/index.ts +12 -0
  449. package/src/network/reqresp/protocols.ts +12 -0
  450. package/src/network/reqresp/rateLimit.ts +18 -0
  451. package/src/network/reqresp/score.ts +2 -0
  452. package/src/network/reqresp/types.ts +26 -5
  453. package/src/node/nodejs.ts +6 -5
  454. package/src/node/notifier.ts +5 -6
  455. package/src/sync/backfill/backfill.ts +3 -3
  456. package/src/sync/unknownBlock.ts +3 -3
  457. package/src/sync/utils/downloadByRange.ts +9 -7
  458. package/src/sync/utils/downloadByRoot.ts +16 -12
  459. package/src/util/blobs.ts +35 -15
  460. package/src/util/dataColumns.ts +69 -25
  461. package/src/util/execution.ts +49 -30
  462. package/src/util/sszBytes.ts +245 -3
  463. package/src/util/types.ts +6 -0
@@ -57,7 +57,11 @@ import {
57
57
  kzgCommitmentToVersionedHash,
58
58
  reconstructBlobs,
59
59
  } from "../../../../util/blobs.js";
60
- import {getDataColumnSidecarsForGloas, getDataColumnSidecarsFromBlock} from "../../../../util/dataColumns.js";
60
+ import {
61
+ getBlobKzgCommitments,
62
+ getDataColumnSidecarsFromBlock,
63
+ getGloasDataColumnSidecars,
64
+ } from "../../../../util/dataColumns.js";
61
65
  import {isOptimisticBlock} from "../../../../util/forkChoice.js";
62
66
  import {kzg} from "../../../../util/kzg.js";
63
67
  import {promiseAllMaybeAsync} from "../../../../util/promises.js";
@@ -99,17 +103,20 @@ export function getBeaconBlockApi({
99
103
  const fork = config.getForkName(slot);
100
104
  const blockRoot = toRootHex(chain.config.getForkTypes(slot).BeaconBlock.hashTreeRoot(signedBlock.message));
101
105
 
102
- // TODO GLOAS: handle new BlockInput type
103
106
  const blockForImport = chain.seenBlockInputCache.getByBlock({
104
107
  block: signedBlock,
105
108
  source: BlockInputSource.api,
106
109
  seenTimestampSec,
107
110
  blockRootHex: blockRoot,
108
111
  });
109
- let blobSidecars: deneb.BlobSidecars, dataColumnSidecars: fulu.DataColumnSidecars;
112
+ let blobSidecars: deneb.BlobSidecars, dataColumnSidecars: fulu.DataColumnSidecar[];
110
113
 
111
114
  if (isDenebBlockContents(signedBlockContents)) {
112
- if (isForkPostFulu(fork)) {
115
+ if (isForkPostGloas(fork)) {
116
+ // After gloas, data columns are not published with the block but when publishing the execution payload envelope
117
+ blobSidecars = [];
118
+ dataColumnSidecars = [];
119
+ } else if (isForkPostFulu(fork)) {
113
120
  const timer = metrics?.peerDas.dataColumnSidecarComputationTime.startTimer();
114
121
  // If the block was produced by this node, we will already have computed cells
115
122
  // Otherwise, we will compute them from the blobs in this function
@@ -124,7 +131,7 @@ export function getBeaconBlockApi({
124
131
  config,
125
132
  signedBlock as SignedBeaconBlock<ForkPostFulu>,
126
133
  cellsAndProofs
127
- );
134
+ ) as fulu.DataColumnSidecar[];
128
135
  timer?.();
129
136
  blobSidecars = [];
130
137
  } else if (isForkPostDeneb(fork)) {
@@ -210,7 +217,7 @@ export function getBeaconBlockApi({
210
217
  if (!blockLocallyProduced) {
211
218
  const parentBlock = chain.forkChoice.getBlockDefaultStatus(signedBlock.message.parentRoot);
212
219
  if (parentBlock === null) {
213
- chain.emitter.emit(ChainEvent.unknownParent, {
220
+ chain.emitter.emit(ChainEvent.blockUnknownParent, {
214
221
  blockInput: blockForImport,
215
222
  peer: IDENTITY_PEER_ID,
216
223
  source: BlockInputSource.api,
@@ -305,7 +312,7 @@ export function getBeaconBlockApi({
305
312
  .processBlock(blockForImport, opts)
306
313
  .catch((e) => {
307
314
  if (e instanceof BlockError && e.type.code === BlockErrorCode.PARENT_UNKNOWN) {
308
- chain.emitter.emit(ChainEvent.unknownParent, {
315
+ chain.emitter.emit(ChainEvent.blockUnknownParent, {
309
316
  blockInput: blockForImport,
310
317
  peer: IDENTITY_PEER_ID,
311
318
  source: BlockInputSource.api,
@@ -607,7 +614,7 @@ export function getBeaconBlockApi({
607
614
  if (slot < head.slot && head.slot <= slot + SLOTS_PER_HISTORICAL_ROOT) {
608
615
  const state = chain.getHeadState();
609
616
  return {
610
- data: {root: state.blockRoots.get(slot % SLOTS_PER_HISTORICAL_ROOT)},
617
+ data: {root: state.getBlockRootAtSlot(slot)},
611
618
  meta: {
612
619
  executionOptimistic: isOptimisticBlock(head),
613
620
  finalized: computeEpochAtSlot(slot) <= chain.forkChoice.getFinalizedCheckpoint().epoch,
@@ -647,6 +654,8 @@ export function getBeaconBlockApi({
647
654
  const slot = envelope.slot;
648
655
  const fork = config.getForkName(slot);
649
656
  const blockRootHex = toRootHex(envelope.beaconBlockRoot);
657
+ const blockHashHex = toRootHex(envelope.payload.blockHash);
658
+ const stateRootHex = toRootHex(envelope.stateRoot);
650
659
 
651
660
  if (!isForkPostGloas(fork)) {
652
661
  throw new ApiError(400, `publishExecutionPayloadEnvelope not supported for pre-gloas fork=${fork}`);
@@ -664,7 +673,7 @@ export function getBeaconBlockApi({
664
673
  await validateApiExecutionPayloadEnvelope(chain, signedExecutionPayloadEnvelope);
665
674
 
666
675
  const isSelfBuild = envelope.builderIndex === BUILDER_INDEX_SELF_BUILD;
667
- let dataColumnSidecars: gloas.DataColumnSidecars = [];
676
+ let dataColumnSidecars: gloas.DataColumnSidecar[] = [];
668
677
 
669
678
  if (isSelfBuild) {
670
679
  // For self-builds, construct and publish data column sidecars from cached block production data
@@ -689,7 +698,7 @@ export function getBeaconBlockApi({
689
698
  ),
690
699
  }));
691
700
 
692
- dataColumnSidecars = getDataColumnSidecarsForGloas(slot, envelope.beaconBlockRoot, cellsAndProofs);
701
+ dataColumnSidecars = getGloasDataColumnSidecars(slot, envelope.beaconBlockRoot, cellsAndProofs);
693
702
  timer?.();
694
703
  }
695
704
  } else {
@@ -730,6 +739,8 @@ export function getBeaconBlockApi({
730
739
  const valLogMeta = {
731
740
  slot,
732
741
  blockRoot: blockRootHex,
742
+ blockHash: blockHashHex,
743
+ stateRoot: stateRootHex,
733
744
  builderIndex: envelope.builderIndex,
734
745
  isSelfBuild,
735
746
  dataColumns: dataColumnSidecars.length,
@@ -750,7 +761,17 @@ export function getBeaconBlockApi({
750
761
  () => chain.processExecutionPayload(payloadInput, {validSignature: true}),
751
762
  ];
752
763
 
753
- const sentPeersArr = await promiseAllMaybeAsync<number | void>(publishPromises);
764
+ const publishPromise = promiseAllMaybeAsync<number | void>(publishPromises);
765
+
766
+ chain.emitter.emit(routes.events.EventType.executionPayloadGossip, {
767
+ slot,
768
+ builderIndex: envelope.builderIndex,
769
+ blockHash: blockHashHex,
770
+ blockRoot: blockRootHex,
771
+ stateRoot: stateRootHex,
772
+ });
773
+
774
+ const sentPeersArr = await publishPromise;
754
775
 
755
776
  // Track metrics for data column publishing
756
777
  if (dataColumnSidecars.length > 0) {
@@ -774,15 +795,11 @@ export function getBeaconBlockApi({
774
795
  metrics?.dataColumns.bySource.inc({source: BlockInputSource.api}, dataColumnSidecars.length);
775
796
 
776
797
  if (chain.emitter.listenerCount(routes.events.EventType.dataColumnSidecar)) {
777
- // TODO GLOAS: revisit this, we likely don't wanna emit KZG commitments anymore
778
- const cachedResult = chain.blockProductionCache.get(blockRootHex) as ProduceFullGloas | undefined;
779
- const kzgCommitments = cachedResult?.blobsBundle.commitments.map(toHex) ?? [];
780
798
  for (const dataColumnSidecar of dataColumnSidecars) {
781
799
  chain.emitter.emit(routes.events.EventType.dataColumnSidecar, {
782
800
  blockRoot: blockRootHex,
783
801
  slot,
784
802
  index: dataColumnSidecar.index,
785
- kzgCommitments,
786
803
  });
787
804
  }
788
805
  }
@@ -906,7 +923,7 @@ export function getBeaconBlockApi({
906
923
  );
907
924
  }
908
925
 
909
- const blobKzgCommitments = (block.message.body as deneb.BeaconBlockBody).blobKzgCommitments;
926
+ const blobKzgCommitments = getBlobKzgCommitments(fork, block as SignedBeaconBlock<ForkPostFulu>);
910
927
  const blobCount = blobKzgCommitments.length;
911
928
 
912
929
  if (blobCount > 0) {
@@ -1,6 +1,7 @@
1
1
  import {routes} from "@lodestar/api";
2
2
  import {ApplicationMethods} from "@lodestar/api/server";
3
3
  import {ForkPostElectra, ForkPreElectra, SYNC_COMMITTEE_SUBNET_SIZE, isForkPostElectra} from "@lodestar/params";
4
+ import {isStatePostAltair} from "@lodestar/state-transition";
4
5
  import {Attestation, Epoch, SingleAttestation, isElectraAttestation, ssz, sszTypesFor} from "@lodestar/types";
5
6
  import {
6
7
  AttestationError,
@@ -249,13 +250,16 @@ export function getBeaconPoolApi({
249
250
 
250
251
  // TODO: Fetch states at signature slots
251
252
  const state = chain.getHeadState();
253
+ if (!isStatePostAltair(state)) {
254
+ throw new ApiError(400, "Sync committee pool is not supported before Altair");
255
+ }
252
256
 
253
257
  const failures: FailureList = [];
254
258
 
255
259
  await Promise.all(
256
260
  signatures.map(async (signature, i) => {
257
261
  try {
258
- const synCommittee = state.epochCtx.getIndexedSyncCommittee(signature.slot);
262
+ const synCommittee = state.getIndexedSyncCommittee(signature.slot);
259
263
  const indexesInCommittee = synCommittee.validatorIndexMap.get(signature.validatorIndex);
260
264
  if (indexesInCommittee === undefined || indexesInCommittee.length === 0) {
261
265
  return; // Not a sync committee member
@@ -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
  },