@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
@@ -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
@@ -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" ||
@@ -1647,7 +1642,7 @@ export function getValidatorApi(
1647
1642
  throw Error("Cached block production result is not full block");
1648
1643
  }
1649
1644
 
1650
- const {executionPayload, executionRequests, envelopeStateRoot} = produceResult as ProduceFullGloas;
1645
+ const {executionPayload, executionRequests, payloadEnvelopeStateRoot} = produceResult as ProduceFullGloas;
1651
1646
 
1652
1647
  const envelope: gloas.ExecutionPayloadEnvelope = {
1653
1648
  payload: executionPayload,
@@ -1655,7 +1650,7 @@ export function getValidatorApi(
1655
1650
  builderIndex: BUILDER_INDEX_SELF_BUILD,
1656
1651
  beaconBlockRoot,
1657
1652
  slot,
1658
- stateRoot: envelopeStateRoot,
1653
+ stateRoot: payloadEnvelopeStateRoot,
1659
1654
  };
1660
1655
 
1661
1656
  logger.info("Produced execution payload envelope", {
@@ -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
 
@@ -3,6 +3,7 @@ import {Logger, sleep} from "@lodestar/utils";
3
3
  import {Metrics} from "../metrics/metrics.js";
4
4
  import {DataColumnReconstructionCode, recoverDataColumnSidecars} from "../util/dataColumns.js";
5
5
  import {BlockInputColumns} from "./blocks/blockInput/index.js";
6
+ import {PayloadEnvelopeInput} from "./blocks/payloadEnvelopeInput/index.js";
6
7
  import {ChainEventEmitter} from "./emitter.js";
7
8
 
8
9
  /**
@@ -53,25 +54,25 @@ export class ColumnReconstructionTracker {
53
54
  this.maxDelayMs = this.config.getSlotComponentDurationMs(RECONSTRUCTION_DELAY_MAX_BPS);
54
55
  }
55
56
 
56
- triggerColumnReconstruction(blockInput: BlockInputColumns): void {
57
+ triggerColumnReconstruction(input: BlockInputColumns | PayloadEnvelopeInput): void {
57
58
  if (this.running) {
58
59
  return;
59
60
  }
60
61
 
61
- if (this.lastBlockRootHex === blockInput.blockRootHex) {
62
+ if (this.lastBlockRootHex === input.blockRootHex) {
62
63
  return;
63
64
  }
64
65
 
65
66
  // We don't care about the outcome of this call,
66
67
  // just that it has been triggered for this block root.
67
68
  this.running = true;
68
- this.lastBlockRootHex = blockInput.blockRootHex;
69
+ this.lastBlockRootHex = input.blockRootHex;
69
70
  const delay = this.minDelayMs + Math.random() * (this.maxDelayMs - this.minDelayMs);
70
71
  sleep(delay)
71
72
  .then(() => {
72
- const logCtx = {slot: blockInput.slot, root: blockInput.blockRootHex};
73
+ const logCtx = {slot: input.slot, root: input.blockRootHex};
73
74
  this.logger.debug("Attempting data column sidecar reconstruction", logCtx);
74
- recoverDataColumnSidecars(blockInput, this.emitter, this.metrics)
75
+ recoverDataColumnSidecars(input, this.emitter, this.metrics)
75
76
  .then((result) => {
76
77
  this.metrics?.recoverDataColumnSidecars.reconstructionResult.inc({result});
77
78
  this.logger.debug("Data column sidecar reconstruction complete", {...logCtx, result});
@@ -11,6 +11,7 @@ import {
11
11
  getDataColumnSidecarsFromExecution,
12
12
  } from "../util/execution.js";
13
13
  import {IBlockInput, isBlockInputBlobs} from "./blocks/blockInput/index.js";
14
+ import {PayloadEnvelopeInput} from "./blocks/payloadEnvelopeInput/index.js";
14
15
  import {ChainEventEmitter} from "./emitter.js";
15
16
 
16
17
  export type GetBlobsTrackerInit = {
@@ -43,22 +44,22 @@ export class GetBlobsTracker {
43
44
  this.config = init.config;
44
45
  }
45
46
 
46
- triggerGetBlobs(blockInput: IBlockInput): void {
47
- if (this.activeReconstructions.has(blockInput.blockRootHex)) {
47
+ triggerGetBlobs(input: IBlockInput | PayloadEnvelopeInput, onComplete?: () => void): void {
48
+ if (this.activeReconstructions.has(input.blockRootHex)) {
48
49
  return;
49
50
  }
50
51
 
51
- if (isBlockInputBlobs(blockInput)) {
52
+ if (!(input instanceof PayloadEnvelopeInput) && isBlockInputBlobs(input)) {
52
53
  // there is not preallocation for blob sidecars like there is for columns sidecars so no need to
53
54
  // store the index for the preallocated buffers
54
- this.activeReconstructions.add(blockInput.blockRootHex);
55
+ this.activeReconstructions.add(input.blockRootHex);
55
56
  callInNextEventLoop(() => {
56
- const logCtx = {slot: blockInput.slot, root: blockInput.blockRootHex};
57
+ const logCtx = {slot: input.slot, root: input.blockRootHex};
57
58
  this.logger.verbose("Trigger getBlobsV1 for block", logCtx);
58
- getBlobSidecarsFromExecution(this.config, this.executionEngine, this.metrics, this.emitter, blockInput).finally(
59
+ getBlobSidecarsFromExecution(this.config, this.executionEngine, this.metrics, this.emitter, input).finally(
59
60
  () => {
60
61
  this.logger.verbose("Completed getBlobsV1 for block", logCtx);
61
- this.activeReconstructions.delete(blockInput.blockRootHex);
62
+ this.activeReconstructions.delete(input.blockRootHex);
62
63
  }
63
64
  );
64
65
  });
@@ -72,7 +73,7 @@ export class GetBlobsTracker {
72
73
  this.blobsAndProofsBuffers[freeIndex] = {inUse: false, buffers: []};
73
74
  }
74
75
 
75
- const maxBlobs = this.config.getMaxBlobsPerBlock(computeEpochAtSlot(blockInput.slot));
76
+ const maxBlobs = this.config.getMaxBlobsPerBlock(computeEpochAtSlot(input.slot));
76
77
  // double check that there is enough pre-allocated space (blob schedule may have changed since the last use)
77
78
  const timer = this.metrics?.peerDas.getBlobsV2PreAllocationTime.startTimer();
78
79
  for (let i = 0; i < maxBlobs; i++) {
@@ -84,22 +85,23 @@ export class GetBlobsTracker {
84
85
 
85
86
  // We don't care about the outcome of this call,
86
87
  // just that it has been triggered for this block root.
87
- this.activeReconstructions.add(blockInput.blockRootHex);
88
+ this.activeReconstructions.add(input.blockRootHex);
88
89
  this.blobsAndProofsBuffers[freeIndex].inUse = true;
89
90
  callInNextEventLoop(() => {
90
- const logCtx = {slot: blockInput.slot, root: blockInput.blockRootHex};
91
+ const logCtx = {slot: input.slot, root: input.blockRootHex};
91
92
  this.logger.verbose("Trigger getBlobsV2 for block", logCtx);
92
93
  getDataColumnSidecarsFromExecution(
93
94
  this.config,
94
95
  this.executionEngine,
95
96
  this.emitter,
96
- blockInput,
97
+ input,
97
98
  this.metrics,
98
99
  this.blobsAndProofsBuffers[freeIndex].buffers
99
100
  )
100
101
  .then((result) => {
101
102
  this.logger.debug("getBlobsV2 result for block", {...logCtx, result});
102
103
  this.metrics?.dataColumns.dataColumnEngineResult.inc({result});
104
+ onComplete?.();
103
105
  })
104
106
  .catch((error) => {
105
107
  this.logger.debug("Error during getBlobsV2 for block", logCtx, error as Error);
@@ -107,7 +109,7 @@ export class GetBlobsTracker {
107
109
  })
108
110
  .finally(() => {
109
111
  this.logger.verbose("Completed getBlobsV2 for block", logCtx);
110
- this.activeReconstructions.delete(blockInput.blockRootHex);
112
+ this.activeReconstructions.delete(input.blockRootHex);
111
113
  this.blobsAndProofsBuffers[freeIndex].inUse = false;
112
114
  });
113
115
  });
@@ -120,6 +120,7 @@ export class ArchiveStore {
120
120
  opts: {
121
121
  genesisTime: this.chain.clock.genesisTime,
122
122
  dbLocation: this.opts.dbName,
123
+ nativeStateView: this.opts.nativeStateView ?? false,
123
124
  },
124
125
  config: this.chain.config,
125
126
  metrics: this.metrics,
@@ -1,33 +1,15 @@
1
1
  import {BeaconConfig} from "@lodestar/config";
2
2
  import {
3
- BeaconStateAllForks,
4
- CachedBeaconStateAllForks,
5
3
  DataAvailabilityStatus,
6
4
  ExecutionPayloadStatus,
7
- PubkeyCache,
8
- createCachedBeaconState,
9
- stateTransition,
5
+ IBeaconStateView,
6
+ createBeaconStateViewForHistoricalRegen,
10
7
  } from "@lodestar/state-transition";
11
8
  import {byteArrayEquals} from "@lodestar/utils";
12
9
  import {IBeaconDb} from "../../../db/index.js";
13
- import {getStateTypeFromBytes} from "../../../util/multifork.js";
14
10
  import {HistoricalStateRegenMetrics} from "./metrics.js";
15
11
  import {RegenErrorType} from "./types.js";
16
12
 
17
- /**
18
- * Populate a PubkeyCache with any new entries based on a BeaconState
19
- */
20
- export function syncPubkeyCache(state: BeaconStateAllForks, pubkeyCache: PubkeyCache): void {
21
- // Get the validators sub tree once for all the loop
22
- const validators = state.validators;
23
-
24
- const newCount = state.validators.length;
25
- for (let i = pubkeyCache.size; i < newCount; i++) {
26
- const pubkey = validators.getReadonly(i).pubkey;
27
- pubkeyCache.set(i, pubkey);
28
- }
29
- }
30
-
31
13
  /**
32
14
  * Get the nearest BeaconState at or before a slot
33
15
  */
@@ -35,27 +17,17 @@ export async function getNearestState(
35
17
  slot: number,
36
18
  config: BeaconConfig,
37
19
  db: IBeaconDb,
38
- pubkeyCache: PubkeyCache
39
- ): Promise<CachedBeaconStateAllForks> {
20
+ nativeStateView: boolean
21
+ ): Promise<IBeaconStateView> {
40
22
  const stateBytesArr = await db.stateArchive.binaries({limit: 1, lte: slot, reverse: true});
41
23
  if (!stateBytesArr.length) {
42
24
  throw new Error("No near state found in the database");
43
25
  }
44
26
 
45
27
  const stateBytes = stateBytesArr[0];
46
- const state = getStateTypeFromBytes(config, stateBytes).deserializeToViewDU(stateBytes);
47
- syncPubkeyCache(state, pubkeyCache);
48
-
49
- return createCachedBeaconState(
50
- state,
51
- {
52
- config,
53
- pubkeyCache,
54
- },
55
- {
56
- skipSyncPubkeys: true,
57
- }
58
- );
28
+ return nativeStateView
29
+ ? createBeaconStateViewForHistoricalRegen({useNative: true, stateBytes})
30
+ : createBeaconStateViewForHistoricalRegen({useNative: false, config, stateBytes});
59
31
  }
60
32
 
61
33
  /**
@@ -65,13 +37,13 @@ export async function getHistoricalState(
65
37
  slot: number,
66
38
  config: BeaconConfig,
67
39
  db: IBeaconDb,
68
- pubkeyCache: PubkeyCache,
40
+ nativeStateView: boolean,
69
41
  metrics?: HistoricalStateRegenMetrics
70
42
  ): Promise<Uint8Array> {
71
43
  const regenTimer = metrics?.regenTime.startTimer();
72
44
 
73
45
  const loadStateTimer = metrics?.loadStateTime.startTimer();
74
- let state = await getNearestState(slot, config, db, pubkeyCache).catch((e) => {
46
+ let state = await getNearestState(slot, config, db, nativeStateView).catch((e) => {
75
47
  metrics?.regenErrorCount.inc({reason: RegenErrorType.loadState});
76
48
  throw e;
77
49
  });
@@ -81,8 +53,7 @@ export async function getHistoricalState(
81
53
  let blockCount = 0;
82
54
  for await (const block of db.blockArchive.valuesStream({gt: state.slot, lte: slot})) {
83
55
  try {
84
- state = stateTransition(
85
- state,
56
+ state = state.stateTransition(
86
57
  block,
87
58
  {
88
59
  verifyProposer: false,
@@ -20,7 +20,7 @@ export class HistoricalStateRegen implements HistoricalStateWorkerApi {
20
20
  private readonly api: ModuleThread<HistoricalStateWorkerApi>;
21
21
  private readonly logger: LoggerNode;
22
22
 
23
- constructor(modules: HistoricalStateRegenModules) {
23
+ private constructor(modules: HistoricalStateRegenModules) {
24
24
  this.api = modules.api;
25
25
  this.logger = modules.logger;
26
26
  modules.signal?.addEventListener("abort", () => this.close(), {once: true});
@@ -35,6 +35,7 @@ export class HistoricalStateRegen implements HistoricalStateWorkerApi {
35
35
  dbLocation: modules.opts.dbLocation,
36
36
  metricsEnabled: Boolean(modules.metrics),
37
37
  loggerOpts: modules.logger.toOpts(),
38
+ nativeStateView: modules.opts.nativeStateView,
38
39
  };
39
40
 
40
41
  const worker = new Worker(path.join(WORKER_DIR, "worker.js"), {
@@ -7,6 +7,7 @@ export type HistoricalStateRegenInitModules = {
7
7
  opts: {
8
8
  genesisTime: number;
9
9
  dbLocation: string;
10
+ nativeStateView: boolean;
10
11
  };
11
12
  config: BeaconConfig;
12
13
  logger: LoggerNode;
@@ -26,6 +27,7 @@ export type HistoricalStateWorkerData = {
26
27
  dbLocation: string;
27
28
  metricsEnabled: boolean;
28
29
  loggerOpts: LoggerNodeOpts;
30
+ nativeStateView: boolean;
29
31
  };
30
32
 
31
33
  export type HistoricalStateWorkerApi = {
@@ -3,7 +3,6 @@ import {Transfer, expose} from "@chainsafe/threads/worker";
3
3
  import {chainConfigFromJson, createBeaconConfig} from "@lodestar/config";
4
4
  import {LevelDbController} from "@lodestar/db/controller/level";
5
5
  import {getNodeLogger} from "@lodestar/logger/node";
6
- import {createPubkeyCache} from "@lodestar/state-transition";
7
6
  import {BeaconDb} from "../../../db/index.js";
8
7
  import {RegistryMetricCreator, collectNodeJSMetrics} from "../../../metrics/index.js";
9
8
  import {JobFnQueue} from "../../../util/queue/fnQueue.js";
@@ -52,8 +51,6 @@ const queue = new JobFnQueue(
52
51
  queueMetrics
53
52
  );
54
53
 
55
- const pubkeyCache = createPubkeyCache();
56
-
57
54
  const api: HistoricalStateWorkerApi = {
58
55
  async close() {
59
56
  abortController.abort();
@@ -65,7 +62,7 @@ const api: HistoricalStateWorkerApi = {
65
62
  historicalStateRegenMetrics?.regenRequestCount.inc();
66
63
 
67
64
  const stateBytes = await queue.push<Uint8Array>(() =>
68
- getHistoricalState(slot, config, db, pubkeyCache, historicalStateRegenMetrics)
65
+ getHistoricalState(slot, config, db, workerData.nativeStateView, historicalStateRegenMetrics)
69
66
  );
70
67
  const result = Transfer(stateBytes, [stateBytes.buffer]) as unknown as Uint8Array;
71
68
 
@@ -25,6 +25,7 @@ export type ArchiveStoreOpts = StatesArchiveOpts & {
25
25
  archiveDataEpochs?: number;
26
26
  pruneHistory?: boolean;
27
27
  serveHistoricalState?: boolean;
28
+ nativeStateView?: boolean;
28
29
  };
29
30
 
30
31
  export type ProposalStats = {
@@ -1,11 +1,5 @@
1
1
  import {CheckpointWithHex} from "@lodestar/fork-choice";
2
- import {
3
- CachedBeaconStateAllForks,
4
- EffectiveBalanceIncrements,
5
- computeStartSlotAtEpoch,
6
- getBlockRootAtSlot,
7
- getEffectiveBalanceIncrementsZeroInactive,
8
- } from "@lodestar/state-transition";
2
+ import {EffectiveBalanceIncrements, IBeaconStateView, computeStartSlotAtEpoch} from "@lodestar/state-transition";
9
3
  import {Epoch, RootHex} from "@lodestar/types";
10
4
  import {toRootHex} from "@lodestar/utils";
11
5
 
@@ -29,11 +23,11 @@ export class CheckpointBalancesCache {
29
23
  * `state.current_epoch`. If there is not already some entry for the given block root, then
30
24
  * add the effective balances from the `state` to the cache.
31
25
  */
32
- processState(blockRootHex: RootHex, state: CachedBeaconStateAllForks): void {
33
- const epoch = state.epochCtx.epoch;
26
+ processState(blockRootHex: RootHex, state: IBeaconStateView): void {
27
+ const epoch = state.epoch;
34
28
  const epochBoundarySlot = computeStartSlotAtEpoch(epoch);
35
29
  const epochBoundaryRoot =
36
- epochBoundarySlot === state.slot ? blockRootHex : toRootHex(getBlockRootAtSlot(state, epochBoundarySlot));
30
+ epochBoundarySlot === state.slot ? blockRootHex : toRootHex(state.getBlockRootAtSlot(epochBoundarySlot));
37
31
 
38
32
  const index = this.items.findIndex((item) => item.epoch === epoch && item.rootHex === epochBoundaryRoot);
39
33
  if (index === -1) {
@@ -41,7 +35,7 @@ export class CheckpointBalancesCache {
41
35
  this.items.shift();
42
36
  }
43
37
  // expect to reach this once per epoch
44
- this.items.push({epoch, rootHex: epochBoundaryRoot, balances: getEffectiveBalanceIncrementsZeroInactive(state)});
38
+ this.items.push({epoch, rootHex: epochBoundaryRoot, balances: state.getEffectiveBalanceIncrementsZeroInactive()});
45
39
  }
46
40
  }
47
41
 
@@ -617,7 +617,7 @@ type BlockInputColumnsState =
617
617
  * - The block is not yet seen and all required sampled columns are seen
618
618
  * - The block is not yet seen and all required sampled columns are not yet seen
619
619
  */
620
- export class BlockInputColumns extends AbstractBlockInput<ForkColumnsDA, fulu.DataColumnSidecars> {
620
+ export class BlockInputColumns extends AbstractBlockInput<ForkColumnsDA, fulu.DataColumnSidecar[]> {
621
621
  type = DAType.Columns as const;
622
622
 
623
623
  state: BlockInputColumnsState;
@@ -630,7 +630,7 @@ export class BlockInputColumns extends AbstractBlockInput<ForkColumnsDA, fulu.Da
630
630
  *
631
631
  * This is different from `dataPromise` which resolves when all data is available or could become available (e.g. through reconstruction)
632
632
  */
633
- protected computedDataPromise = createPromise<fulu.DataColumnSidecars>();
633
+ protected computedDataPromise = createPromise<fulu.DataColumnSidecar[]>();
634
634
 
635
635
  private constructor(
636
636
  init: BlockInputInit,
@@ -854,8 +854,8 @@ export class BlockInputColumns extends AbstractBlockInput<ForkColumnsDA, fulu.Da
854
854
  return this.state.versionedHashes;
855
855
  }
856
856
 
857
- getCustodyColumns(): fulu.DataColumnSidecars {
858
- const columns: fulu.DataColumnSidecars = [];
857
+ getCustodyColumns(): fulu.DataColumnSidecar[] {
858
+ const columns: fulu.DataColumnSidecar[] = [];
859
859
  for (const index of this.custodyColumns) {
860
860
  const column = this.columnsCache.get(index);
861
861
  if (column) {
@@ -876,8 +876,8 @@ export class BlockInputColumns extends AbstractBlockInput<ForkColumnsDA, fulu.Da
876
876
  return columns;
877
877
  }
878
878
 
879
- getSampledColumns(): fulu.DataColumnSidecars {
880
- const columns: fulu.DataColumnSidecars = [];
879
+ getSampledColumns(): fulu.DataColumnSidecar[] {
880
+ const columns: fulu.DataColumnSidecar[] = [];
881
881
  for (const index of this.sampledColumns) {
882
882
  const column = this.columnsCache.get(index);
883
883
  if (column) {
@@ -891,7 +891,7 @@ export class BlockInputColumns extends AbstractBlockInput<ForkColumnsDA, fulu.Da
891
891
  return [...this.columnsCache.values()];
892
892
  }
893
893
 
894
- getAllColumns(): fulu.DataColumnSidecars {
894
+ getAllColumns(): fulu.DataColumnSidecar[] {
895
895
  return this.getAllColumnsWithSource().map(({columnSidecar}) => columnSidecar);
896
896
  }
897
897
 
@@ -919,7 +919,7 @@ export class BlockInputColumns extends AbstractBlockInput<ForkColumnsDA, fulu.Da
919
919
  return this.state.hasComputedAllData;
920
920
  }
921
921
 
922
- waitForComputedAllData(timeout: number, signal?: AbortSignal): Promise<fulu.DataColumnSidecars> {
922
+ waitForComputedAllData(timeout: number, signal?: AbortSignal): Promise<fulu.DataColumnSidecar[]> {
923
923
  if (!this.state.hasComputedAllData) {
924
924
  return withTimeout(() => this.computedDataPromise.promise, timeout, signal);
925
925
  }
@@ -1,5 +1,5 @@
1
1
  import {ForkName} from "@lodestar/params";
2
- import {ColumnIndex, DataColumnSidecars, RootHex, SignedBeaconBlock, Slot, deneb, fulu} from "@lodestar/types";
2
+ import {ColumnIndex, DataColumnSidecar, RootHex, SignedBeaconBlock, Slot, deneb, fulu} from "@lodestar/types";
3
3
  import {VersionedHashes} from "../../../execution/index.js";
4
4
 
5
5
  export enum DAType {
@@ -9,7 +9,7 @@ export enum DAType {
9
9
  NoData = "no-data",
10
10
  }
11
11
 
12
- export type DAData = null | deneb.BlobSidecars | fulu.DataColumnSidecars;
12
+ export type DAData = null | deneb.BlobSidecars | fulu.DataColumnSidecar[];
13
13
 
14
14
  /**
15
15
  * Represents were input originated. Blocks and Data can come from different
@@ -108,9 +108,9 @@ export type MissingColumnMeta = {
108
108
  export interface IDataColumnsInput {
109
109
  readonly slot: Slot;
110
110
  readonly blockRootHex: string;
111
- getCustodyColumns(): DataColumnSidecars;
111
+ getCustodyColumns(): DataColumnSidecar[];
112
112
  hasComputedAllData(): boolean;
113
- waitForComputedAllData(timeout: number, signal?: AbortSignal): Promise<DataColumnSidecars>;
113
+ waitForComputedAllData(timeout: number, signal?: AbortSignal): Promise<DataColumnSidecar[]>;
114
114
  }
115
115
 
116
116
  /**