@lodestar/beacon-node 1.42.0-dev.1d50253953 → 1.42.0-dev.2219bb0cb8

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 (494) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +45 -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 +35 -29
  23. package/lib/api/impl/validator/index.js.map +1 -1
  24. package/lib/api/impl/validator/utils.d.ts +2 -2
  25. package/lib/api/impl/validator/utils.d.ts.map +1 -1
  26. package/lib/api/impl/validator/utils.js +3 -3
  27. package/lib/api/impl/validator/utils.js.map +1 -1
  28. package/lib/chain/ColumnReconstructionTracker.d.ts +2 -1
  29. package/lib/chain/ColumnReconstructionTracker.d.ts.map +1 -1
  30. package/lib/chain/ColumnReconstructionTracker.js +5 -5
  31. package/lib/chain/ColumnReconstructionTracker.js.map +1 -1
  32. package/lib/chain/GetBlobsTracker.d.ts +2 -1
  33. package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
  34. package/lib/chain/GetBlobsTracker.js +14 -12
  35. package/lib/chain/GetBlobsTracker.js.map +1 -1
  36. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  37. package/lib/chain/archiveStore/archiveStore.js +1 -0
  38. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  39. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts +3 -7
  40. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +1 -1
  41. package/lib/chain/archiveStore/historicalState/getHistoricalState.js +8 -26
  42. package/lib/chain/archiveStore/historicalState/getHistoricalState.js.map +1 -1
  43. package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts +2 -2
  44. package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts.map +1 -1
  45. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js +1 -0
  46. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js.map +1 -1
  47. package/lib/chain/archiveStore/historicalState/types.d.ts +2 -0
  48. package/lib/chain/archiveStore/historicalState/types.d.ts.map +1 -1
  49. package/lib/chain/archiveStore/historicalState/types.js.map +1 -1
  50. package/lib/chain/archiveStore/historicalState/worker.js +1 -3
  51. package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
  52. package/lib/chain/archiveStore/interface.d.ts +1 -0
  53. package/lib/chain/archiveStore/interface.d.ts.map +1 -1
  54. package/lib/chain/balancesCache.d.ts +2 -2
  55. package/lib/chain/balancesCache.d.ts.map +1 -1
  56. package/lib/chain/balancesCache.js +4 -4
  57. package/lib/chain/balancesCache.js.map +1 -1
  58. package/lib/chain/blocks/blockInput/blockInput.d.ts +5 -5
  59. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
  60. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  61. package/lib/chain/blocks/blockInput/types.d.ts +5 -4
  62. package/lib/chain/blocks/blockInput/types.d.ts.map +1 -1
  63. package/lib/chain/blocks/blockInput/types.js +1 -0
  64. package/lib/chain/blocks/blockInput/types.js.map +1 -1
  65. package/lib/chain/blocks/importBlock.d.ts +3 -3
  66. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  67. package/lib/chain/blocks/importBlock.js +37 -23
  68. package/lib/chain/blocks/importBlock.js.map +1 -1
  69. package/lib/chain/blocks/importExecutionPayload.d.ts +10 -8
  70. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  71. package/lib/chain/blocks/importExecutionPayload.js +87 -51
  72. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  73. package/lib/chain/blocks/index.d.ts.map +1 -1
  74. package/lib/chain/blocks/index.js +3 -2
  75. package/lib/chain/blocks/index.js.map +1 -1
  76. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +14 -6
  77. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -1
  78. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +33 -2
  79. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -1
  80. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +2 -1
  81. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -1
  82. package/lib/chain/blocks/types.d.ts +21 -15
  83. package/lib/chain/blocks/types.d.ts.map +1 -1
  84. package/lib/chain/blocks/types.js.map +1 -1
  85. package/lib/chain/blocks/utils/checkpoint.d.ts +2 -2
  86. package/lib/chain/blocks/utils/checkpoint.d.ts.map +1 -1
  87. package/lib/chain/blocks/utils/checkpoint.js.map +1 -1
  88. package/lib/chain/blocks/verifyBlock.d.ts +2 -2
  89. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  90. package/lib/chain/blocks/verifyBlock.js +4 -4
  91. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  92. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +5 -5
  93. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  94. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +5 -4
  95. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  96. package/lib/chain/blocks/verifyBlocksSignatures.d.ts +2 -2
  97. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  98. package/lib/chain/blocks/verifyBlocksSignatures.js +4 -2
  99. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  100. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts +3 -3
  101. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +1 -1
  102. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js +3 -3
  103. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
  104. package/lib/chain/chain.d.ts +16 -14
  105. package/lib/chain/chain.d.ts.map +1 -1
  106. package/lib/chain/chain.js +123 -66
  107. package/lib/chain/chain.js.map +1 -1
  108. package/lib/chain/emitter.d.ts +31 -9
  109. package/lib/chain/emitter.d.ts.map +1 -1
  110. package/lib/chain/emitter.js +12 -3
  111. package/lib/chain/emitter.js.map +1 -1
  112. package/lib/chain/errors/blockError.d.ts +15 -5
  113. package/lib/chain/errors/blockError.d.ts.map +1 -1
  114. package/lib/chain/errors/blockError.js +4 -0
  115. package/lib/chain/errors/blockError.js.map +1 -1
  116. package/lib/chain/errors/dataColumnSidecarError.d.ts +31 -1
  117. package/lib/chain/errors/dataColumnSidecarError.d.ts.map +1 -1
  118. package/lib/chain/errors/dataColumnSidecarError.js +7 -0
  119. package/lib/chain/errors/dataColumnSidecarError.js.map +1 -1
  120. package/lib/chain/forkChoice/index.d.ts +4 -4
  121. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  122. package/lib/chain/forkChoice/index.js +30 -24
  123. package/lib/chain/forkChoice/index.js.map +1 -1
  124. package/lib/chain/initState.d.ts +2 -2
  125. package/lib/chain/initState.d.ts.map +1 -1
  126. package/lib/chain/initState.js +1 -1
  127. package/lib/chain/initState.js.map +1 -1
  128. package/lib/chain/interface.d.ts +16 -14
  129. package/lib/chain/interface.d.ts.map +1 -1
  130. package/lib/chain/interface.js.map +1 -1
  131. package/lib/chain/lightClient/index.d.ts +2 -2
  132. package/lib/chain/lightClient/index.d.ts.map +1 -1
  133. package/lib/chain/lightClient/index.js +11 -4
  134. package/lib/chain/lightClient/index.js.map +1 -1
  135. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +6 -6
  136. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  137. package/lib/chain/opPools/aggregatedAttestationPool.js +13 -13
  138. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  139. package/lib/chain/opPools/executionPayloadBidPool.d.ts +2 -2
  140. package/lib/chain/opPools/executionPayloadBidPool.d.ts.map +1 -1
  141. package/lib/chain/opPools/executionPayloadBidPool.js +2 -2
  142. package/lib/chain/opPools/executionPayloadBidPool.js.map +1 -1
  143. package/lib/chain/opPools/opPool.d.ts +3 -3
  144. package/lib/chain/opPools/opPool.d.ts.map +1 -1
  145. package/lib/chain/opPools/opPool.js +7 -7
  146. package/lib/chain/opPools/opPool.js.map +1 -1
  147. package/lib/chain/opPools/utils.d.ts +2 -2
  148. package/lib/chain/opPools/utils.d.ts.map +1 -1
  149. package/lib/chain/opPools/utils.js +1 -1
  150. package/lib/chain/opPools/utils.js.map +1 -1
  151. package/lib/chain/options.d.ts +1 -0
  152. package/lib/chain/options.d.ts.map +1 -1
  153. package/lib/chain/options.js +1 -0
  154. package/lib/chain/options.js.map +1 -1
  155. package/lib/chain/prepareNextSlot.d.ts +2 -2
  156. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  157. package/lib/chain/prepareNextSlot.js +10 -4
  158. package/lib/chain/prepareNextSlot.js.map +1 -1
  159. package/lib/chain/produceBlock/computeNewStateRoot.d.ts +4 -4
  160. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
  161. package/lib/chain/produceBlock/computeNewStateRoot.js +9 -10
  162. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  163. package/lib/chain/produceBlock/produceBlockBody.d.ts +7 -7
  164. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  165. package/lib/chain/produceBlock/produceBlockBody.js +32 -17
  166. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  167. package/lib/chain/regen/interface.d.ts +13 -13
  168. package/lib/chain/regen/interface.d.ts.map +1 -1
  169. package/lib/chain/regen/queued.d.ts +14 -14
  170. package/lib/chain/regen/queued.d.ts.map +1 -1
  171. package/lib/chain/regen/queued.js.map +1 -1
  172. package/lib/chain/regen/regen.d.ts +6 -5
  173. package/lib/chain/regen/regen.d.ts.map +1 -1
  174. package/lib/chain/regen/regen.js +6 -6
  175. package/lib/chain/regen/regen.js.map +1 -1
  176. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +1 -1
  177. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
  178. package/lib/chain/seenCache/seenGossipBlockInput.js +2 -2
  179. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  180. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +1 -1
  181. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -1
  182. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +2 -2
  183. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -1
  184. package/lib/chain/serializeState.d.ts +2 -2
  185. package/lib/chain/serializeState.d.ts.map +1 -1
  186. package/lib/chain/serializeState.js +1 -1
  187. package/lib/chain/serializeState.js.map +1 -1
  188. package/lib/chain/shufflingCache.d.ts +2 -2
  189. package/lib/chain/shufflingCache.d.ts.map +1 -1
  190. package/lib/chain/shufflingCache.js +3 -4
  191. package/lib/chain/shufflingCache.js.map +1 -1
  192. package/lib/chain/stateCache/fifoBlockStateCache.d.ts +6 -6
  193. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -1
  194. package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
  195. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +11 -11
  196. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  197. package/lib/chain/stateCache/persistentCheckpointsCache.js +12 -16
  198. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  199. package/lib/chain/stateCache/types.d.ts +14 -14
  200. package/lib/chain/stateCache/types.d.ts.map +1 -1
  201. package/lib/chain/stateCache/types.js.map +1 -1
  202. package/lib/chain/validation/attesterSlashing.js +3 -3
  203. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  204. package/lib/chain/validation/blobSidecar.js +1 -1
  205. package/lib/chain/validation/blobSidecar.js.map +1 -1
  206. package/lib/chain/validation/block.d.ts.map +1 -1
  207. package/lib/chain/validation/block.js +28 -6
  208. package/lib/chain/validation/block.js.map +1 -1
  209. package/lib/chain/validation/blsToExecutionChange.js +2 -2
  210. package/lib/chain/validation/blsToExecutionChange.js.map +1 -1
  211. package/lib/chain/validation/dataColumnSidecar.d.ts +11 -4
  212. package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
  213. package/lib/chain/validation/dataColumnSidecar.js +185 -6
  214. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  215. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  216. package/lib/chain/validation/executionPayloadBid.js +10 -7
  217. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  218. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
  219. package/lib/chain/validation/executionPayloadEnvelope.js +7 -3
  220. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  221. package/lib/chain/validation/payloadAttestationMessage.js +5 -3
  222. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
  223. package/lib/chain/validation/proposerSlashing.js +1 -1
  224. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  225. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts +2 -2
  226. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -1
  227. package/lib/chain/validation/signatureSets/contributionAndProof.js +1 -1
  228. package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
  229. package/lib/chain/validation/signatureSets/syncCommittee.d.ts +2 -2
  230. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -1
  231. package/lib/chain/validation/signatureSets/syncCommittee.js +1 -1
  232. package/lib/chain/validation/signatureSets/syncCommittee.js.map +1 -1
  233. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts +2 -2
  234. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -1
  235. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js.map +1 -1
  236. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts +2 -2
  237. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -1
  238. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js +1 -1
  239. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js.map +1 -1
  240. package/lib/chain/validation/syncCommittee.d.ts +4 -4
  241. package/lib/chain/validation/syncCommittee.d.ts.map +1 -1
  242. package/lib/chain/validation/syncCommittee.js +17 -12
  243. package/lib/chain/validation/syncCommittee.js.map +1 -1
  244. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
  245. package/lib/chain/validation/syncCommitteeContributionAndProof.js +5 -2
  246. package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
  247. package/lib/chain/validation/voluntaryExit.d.ts.map +1 -1
  248. package/lib/chain/validation/voluntaryExit.js +3 -3
  249. package/lib/chain/validation/voluntaryExit.js.map +1 -1
  250. package/lib/chain/validatorMonitor.d.ts +3 -3
  251. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  252. package/lib/chain/validatorMonitor.js +11 -9
  253. package/lib/chain/validatorMonitor.js.map +1 -1
  254. package/lib/db/buckets.d.ts +2 -2
  255. package/lib/db/buckets.d.ts.map +1 -1
  256. package/lib/db/buckets.js +2 -2
  257. package/lib/db/buckets.js.map +1 -1
  258. package/lib/db/repositories/blockArchiveIndex.d.ts +2 -2
  259. package/lib/db/repositories/blockArchiveIndex.d.ts.map +1 -1
  260. package/lib/db/repositories/dataColumnSidecar.d.ts.map +1 -1
  261. package/lib/db/repositories/dataColumnSidecar.js +4 -2
  262. package/lib/db/repositories/dataColumnSidecar.js.map +1 -1
  263. package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +1 -1
  264. package/lib/db/repositories/dataColumnSidecarArchive.js +4 -2
  265. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
  266. package/lib/metrics/metrics/lodestar.d.ts +32 -4
  267. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  268. package/lib/metrics/metrics/lodestar.js +52 -15
  269. package/lib/metrics/metrics/lodestar.js.map +1 -1
  270. package/lib/network/gossip/encoding.d.ts.map +1 -1
  271. package/lib/network/gossip/encoding.js +15 -0
  272. package/lib/network/gossip/encoding.js.map +1 -1
  273. package/lib/network/interface.d.ts +7 -4
  274. package/lib/network/interface.d.ts.map +1 -1
  275. package/lib/network/libp2p/index.d.ts.map +1 -1
  276. package/lib/network/libp2p/index.js +22 -11
  277. package/lib/network/libp2p/index.js.map +1 -1
  278. package/lib/network/network.d.ts +7 -4
  279. package/lib/network/network.d.ts.map +1 -1
  280. package/lib/network/network.js +12 -3
  281. package/lib/network/network.js.map +1 -1
  282. package/lib/network/options.d.ts.map +1 -1
  283. package/lib/network/options.js +7 -2
  284. package/lib/network/options.js.map +1 -1
  285. package/lib/network/processor/extractSlotRootFns.d.ts +1 -1
  286. package/lib/network/processor/extractSlotRootFns.d.ts.map +1 -1
  287. package/lib/network/processor/extractSlotRootFns.js +25 -5
  288. package/lib/network/processor/extractSlotRootFns.js.map +1 -1
  289. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  290. package/lib/network/processor/gossipHandlers.js +269 -80
  291. package/lib/network/processor/gossipHandlers.js.map +1 -1
  292. package/lib/network/processor/index.d.ts +22 -7
  293. package/lib/network/processor/index.d.ts.map +1 -1
  294. package/lib/network/processor/index.js +313 -80
  295. package/lib/network/processor/index.js.map +1 -1
  296. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -1
  297. package/lib/network/reqresp/ReqRespBeaconNode.js +9 -0
  298. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  299. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
  300. package/lib/network/reqresp/handlers/beaconBlocksByRange.js +2 -1
  301. package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
  302. package/lib/network/reqresp/handlers/beaconBlocksByRoot.d.ts.map +1 -1
  303. package/lib/network/reqresp/handlers/beaconBlocksByRoot.js +2 -0
  304. package/lib/network/reqresp/handlers/beaconBlocksByRoot.js.map +1 -1
  305. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts +2 -2
  306. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +1 -1
  307. package/lib/network/reqresp/handlers/blobSidecarsByRange.js +7 -3
  308. package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +1 -1
  309. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts.map +1 -1
  310. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js +6 -0
  311. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js.map +1 -1
  312. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts +2 -2
  313. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -1
  314. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +7 -3
  315. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -1
  316. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts +8 -0
  317. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts.map +1 -0
  318. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js +70 -0
  319. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js.map +1 -0
  320. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.d.ts +6 -0
  321. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.d.ts.map +1 -0
  322. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js +23 -0
  323. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js.map +1 -0
  324. package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
  325. package/lib/network/reqresp/handlers/index.js +11 -1
  326. package/lib/network/reqresp/handlers/index.js.map +1 -1
  327. package/lib/network/reqresp/protocols.d.ts +2 -0
  328. package/lib/network/reqresp/protocols.d.ts.map +1 -1
  329. package/lib/network/reqresp/protocols.js +10 -0
  330. package/lib/network/reqresp/protocols.js.map +1 -1
  331. package/lib/network/reqresp/rateLimit.d.ts.map +1 -1
  332. package/lib/network/reqresp/rateLimit.js +8 -0
  333. package/lib/network/reqresp/rateLimit.js.map +1 -1
  334. package/lib/network/reqresp/score.d.ts.map +1 -1
  335. package/lib/network/reqresp/score.js +2 -0
  336. package/lib/network/reqresp/score.js.map +1 -1
  337. package/lib/network/reqresp/types.d.ts +10 -4
  338. package/lib/network/reqresp/types.d.ts.map +1 -1
  339. package/lib/network/reqresp/types.js +16 -4
  340. package/lib/network/reqresp/types.js.map +1 -1
  341. package/lib/node/nodejs.d.ts +2 -2
  342. package/lib/node/nodejs.d.ts.map +1 -1
  343. package/lib/node/nodejs.js +3 -3
  344. package/lib/node/nodejs.js.map +1 -1
  345. package/lib/node/notifier.d.ts.map +1 -1
  346. package/lib/node/notifier.js +3 -3
  347. package/lib/node/notifier.js.map +1 -1
  348. package/lib/sync/backfill/backfill.d.ts +2 -2
  349. package/lib/sync/backfill/backfill.d.ts.map +1 -1
  350. package/lib/sync/backfill/backfill.js +2 -2
  351. package/lib/sync/backfill/backfill.js.map +1 -1
  352. package/lib/sync/unknownBlock.d.ts +3 -9
  353. package/lib/sync/unknownBlock.d.ts.map +1 -1
  354. package/lib/sync/unknownBlock.js +10 -43
  355. package/lib/sync/unknownBlock.js.map +1 -1
  356. package/lib/sync/utils/downloadByRange.d.ts +3 -3
  357. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  358. package/lib/sync/utils/downloadByRange.js +4 -2
  359. package/lib/sync/utils/downloadByRange.js.map +1 -1
  360. package/lib/sync/utils/downloadByRoot.d.ts +3 -3
  361. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  362. package/lib/sync/utils/downloadByRoot.js +10 -5
  363. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  364. package/lib/util/blobs.d.ts +3 -3
  365. package/lib/util/blobs.d.ts.map +1 -1
  366. package/lib/util/blobs.js +21 -10
  367. package/lib/util/blobs.js.map +1 -1
  368. package/lib/util/dataColumns.d.ts +18 -11
  369. package/lib/util/dataColumns.d.ts.map +1 -1
  370. package/lib/util/dataColumns.js +51 -17
  371. package/lib/util/dataColumns.js.map +1 -1
  372. package/lib/util/execution.d.ts +6 -2
  373. package/lib/util/execution.d.ts.map +1 -1
  374. package/lib/util/execution.js +49 -25
  375. package/lib/util/execution.js.map +1 -1
  376. package/lib/util/sszBytes.d.ts +25 -1
  377. package/lib/util/sszBytes.d.ts.map +1 -1
  378. package/lib/util/sszBytes.js +189 -2
  379. package/lib/util/sszBytes.js.map +1 -1
  380. package/lib/util/types.d.ts +2 -0
  381. package/lib/util/types.d.ts.map +1 -1
  382. package/lib/util/types.js +1 -0
  383. package/lib/util/types.js.map +1 -1
  384. package/package.json +16 -16
  385. package/src/api/impl/beacon/blocks/index.ts +62 -16
  386. package/src/api/impl/beacon/pool/index.ts +5 -1
  387. package/src/api/impl/beacon/state/index.ts +43 -55
  388. package/src/api/impl/beacon/state/utils.ts +11 -25
  389. package/src/api/impl/debug/index.ts +2 -2
  390. package/src/api/impl/lodestar/index.ts +8 -8
  391. package/src/api/impl/proof/index.ts +2 -9
  392. package/src/api/impl/validator/index.ts +38 -43
  393. package/src/api/impl/validator/utils.ts +4 -7
  394. package/src/chain/ColumnReconstructionTracker.ts +6 -5
  395. package/src/chain/GetBlobsTracker.ts +14 -12
  396. package/src/chain/archiveStore/archiveStore.ts +1 -0
  397. package/src/chain/archiveStore/historicalState/getHistoricalState.ts +10 -39
  398. package/src/chain/archiveStore/historicalState/historicalStateRegen.ts +2 -1
  399. package/src/chain/archiveStore/historicalState/types.ts +2 -0
  400. package/src/chain/archiveStore/historicalState/worker.ts +1 -4
  401. package/src/chain/archiveStore/interface.ts +1 -0
  402. package/src/chain/balancesCache.ts +5 -11
  403. package/src/chain/blocks/blockInput/blockInput.ts +8 -8
  404. package/src/chain/blocks/blockInput/types.ts +5 -4
  405. package/src/chain/blocks/importBlock.ts +50 -31
  406. package/src/chain/blocks/importExecutionPayload.ts +98 -62
  407. package/src/chain/blocks/index.ts +3 -2
  408. package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +53 -12
  409. package/src/chain/blocks/payloadEnvelopeInput/types.ts +2 -1
  410. package/src/chain/blocks/types.ts +26 -15
  411. package/src/chain/blocks/utils/checkpoint.ts +2 -2
  412. package/src/chain/blocks/verifyBlock.ts +5 -10
  413. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +10 -14
  414. package/src/chain/blocks/verifyBlocksSignatures.ts +10 -3
  415. package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +6 -8
  416. package/src/chain/chain.ts +167 -98
  417. package/src/chain/emitter.ts +27 -9
  418. package/src/chain/errors/blockError.ts +11 -5
  419. package/src/chain/errors/dataColumnSidecarError.ts +32 -1
  420. package/src/chain/forkChoice/index.ts +35 -41
  421. package/src/chain/initState.ts +7 -2
  422. package/src/chain/interface.ts +21 -15
  423. package/src/chain/lightClient/index.ts +17 -18
  424. package/src/chain/opPools/aggregatedAttestationPool.ts +20 -21
  425. package/src/chain/opPools/executionPayloadBidPool.ts +3 -3
  426. package/src/chain/opPools/opPool.ts +13 -14
  427. package/src/chain/opPools/utils.ts +3 -3
  428. package/src/chain/options.ts +2 -0
  429. package/src/chain/prepareNextSlot.ts +14 -8
  430. package/src/chain/produceBlock/computeNewStateRoot.ts +13 -16
  431. package/src/chain/produceBlock/produceBlockBody.ts +51 -48
  432. package/src/chain/regen/interface.ts +13 -17
  433. package/src/chain/regen/queued.ts +16 -20
  434. package/src/chain/regen/regen.ts +16 -17
  435. package/src/chain/seenCache/seenGossipBlockInput.ts +2 -2
  436. package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +2 -2
  437. package/src/chain/serializeState.ts +3 -3
  438. package/src/chain/shufflingCache.ts +5 -7
  439. package/src/chain/stateCache/fifoBlockStateCache.ts +7 -7
  440. package/src/chain/stateCache/persistentCheckpointsCache.ts +27 -42
  441. package/src/chain/stateCache/types.ts +14 -18
  442. package/src/chain/validation/attesterSlashing.ts +3 -3
  443. package/src/chain/validation/blobSidecar.ts +1 -1
  444. package/src/chain/validation/block.ts +31 -10
  445. package/src/chain/validation/blsToExecutionChange.ts +2 -2
  446. package/src/chain/validation/dataColumnSidecar.ts +231 -8
  447. package/src/chain/validation/executionPayloadBid.ts +10 -10
  448. package/src/chain/validation/executionPayloadEnvelope.ts +7 -4
  449. package/src/chain/validation/payloadAttestationMessage.ts +6 -4
  450. package/src/chain/validation/proposerSlashing.ts +1 -1
  451. package/src/chain/validation/signatureSets/contributionAndProof.ts +2 -7
  452. package/src/chain/validation/signatureSets/syncCommittee.ts +2 -7
  453. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +2 -2
  454. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +2 -7
  455. package/src/chain/validation/syncCommittee.ts +25 -20
  456. package/src/chain/validation/syncCommitteeContributionAndProof.ts +9 -10
  457. package/src/chain/validation/voluntaryExit.ts +3 -8
  458. package/src/chain/validatorMonitor.ts +15 -13
  459. package/src/db/buckets.ts +2 -2
  460. package/src/db/repositories/dataColumnSidecar.ts +4 -2
  461. package/src/db/repositories/dataColumnSidecarArchive.ts +4 -2
  462. package/src/metrics/metrics/lodestar.ts +57 -19
  463. package/src/network/gossip/encoding.ts +16 -0
  464. package/src/network/interface.ts +18 -4
  465. package/src/network/libp2p/index.ts +24 -13
  466. package/src/network/network.ts +39 -8
  467. package/src/network/options.ts +7 -2
  468. package/src/network/processor/extractSlotRootFns.ts +32 -6
  469. package/src/network/processor/gossipHandlers.ts +334 -94
  470. package/src/network/processor/index.ts +395 -92
  471. package/src/network/reqresp/ReqRespBeaconNode.ts +13 -0
  472. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +3 -1
  473. package/src/network/reqresp/handlers/beaconBlocksByRoot.ts +3 -0
  474. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +15 -3
  475. package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +11 -0
  476. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +19 -3
  477. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRange.ts +96 -0
  478. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRoot.ts +34 -0
  479. package/src/network/reqresp/handlers/index.ts +12 -0
  480. package/src/network/reqresp/protocols.ts +12 -0
  481. package/src/network/reqresp/rateLimit.ts +18 -0
  482. package/src/network/reqresp/score.ts +2 -0
  483. package/src/network/reqresp/types.ts +26 -5
  484. package/src/node/nodejs.ts +6 -5
  485. package/src/node/notifier.ts +5 -6
  486. package/src/sync/backfill/backfill.ts +3 -3
  487. package/src/sync/unknownBlock.ts +13 -53
  488. package/src/sync/utils/downloadByRange.ts +9 -7
  489. package/src/sync/utils/downloadByRoot.ts +16 -12
  490. package/src/util/blobs.ts +35 -15
  491. package/src/util/dataColumns.ts +69 -25
  492. package/src/util/execution.ts +49 -30
  493. package/src/util/sszBytes.ts +245 -3
  494. package/src/util/types.ts +6 -0
@@ -1,4 +1,4 @@
1
- import {CachedBeaconStateAllForks} from "@lodestar/state-transition";
1
+ import {IBeaconStateView} from "@lodestar/state-transition";
2
2
  import {RootHex, SignedBeaconBlock, Slot, ValidatorIndex} from "@lodestar/types";
3
3
  import {LodestarError, toRootHex} from "@lodestar/utils";
4
4
  import {ExecutionPayloadStatus} from "../../execution/engine/interface.js";
@@ -70,6 +70,10 @@ export enum BlockErrorCode {
70
70
  TOO_MANY_KZG_COMMITMENTS = "BLOCK_ERROR_TOO_MANY_KZG_COMMITMENTS",
71
71
  /** Bid parent block root does not match block parent root */
72
72
  BID_PARENT_ROOT_MISMATCH = "BLOCK_ERROR_BID_PARENT_ROOT_MISMATCH",
73
+ /** The parent block's execution payload has been verified as invalid */
74
+ PARENT_EXECUTION_INVALID = "BLOCK_ERROR_PARENT_EXECUTION_INVALID",
75
+ /** The block's parent execution payload (defined by bid.parent_block_hash) has not been seen */
76
+ PARENT_PAYLOAD_UNKNOWN = "BLOCK_ERROR_PARENT_PAYLOAD_UNKNOWN",
73
77
  }
74
78
 
75
79
  type ExecutionErrorStatus = Exclude<
@@ -91,13 +95,13 @@ export type BlockErrorType =
91
95
  | {code: BlockErrorCode.INCORRECT_PROPOSER; proposerIndex: ValidatorIndex}
92
96
  | {code: BlockErrorCode.PROPOSAL_SIGNATURE_INVALID; blockSlot: Slot}
93
97
  | {code: BlockErrorCode.UNKNOWN_PROPOSER; proposerIndex: ValidatorIndex}
94
- | {code: BlockErrorCode.INVALID_SIGNATURE; state: CachedBeaconStateAllForks}
98
+ | {code: BlockErrorCode.INVALID_SIGNATURE; state: IBeaconStateView}
95
99
  | {
96
100
  code: BlockErrorCode.INVALID_STATE_ROOT;
97
101
  root: Uint8Array;
98
102
  expectedRoot: Uint8Array;
99
- preState: CachedBeaconStateAllForks;
100
- postState: CachedBeaconStateAllForks;
103
+ preState: IBeaconStateView;
104
+ postState: IBeaconStateView;
101
105
  }
102
106
  | {code: BlockErrorCode.NOT_FINALIZED_DESCENDANT; parentRoot: RootHex}
103
107
  | {code: BlockErrorCode.NOT_LATER_THAN_PARENT; parentSlot: Slot; slot: Slot}
@@ -114,7 +118,9 @@ export type BlockErrorType =
114
118
  | {code: BlockErrorCode.EXECUTION_ENGINE_ERROR; execStatus: ExecutionErrorStatus; errorMessage: string}
115
119
  | {code: BlockErrorCode.DATA_UNAVAILABLE}
116
120
  | {code: BlockErrorCode.TOO_MANY_KZG_COMMITMENTS; blobKzgCommitmentsLen: number; commitmentLimit: number}
117
- | {code: BlockErrorCode.BID_PARENT_ROOT_MISMATCH; bidParentRoot: RootHex; blockParentRoot: RootHex};
121
+ | {code: BlockErrorCode.BID_PARENT_ROOT_MISMATCH; bidParentRoot: RootHex; blockParentRoot: RootHex}
122
+ | {code: BlockErrorCode.PARENT_EXECUTION_INVALID; parentRoot: RootHex}
123
+ | {code: BlockErrorCode.PARENT_PAYLOAD_UNKNOWN; parentBlockHash: RootHex};
118
124
 
119
125
  export class BlockGossipError extends GossipActionError<BlockErrorType> {}
120
126
 
@@ -1,3 +1,4 @@
1
+ import {ForkName} from "@lodestar/params";
1
2
  import {RootHex, Slot, SubnetID} from "@lodestar/types";
2
3
  import {LodestarError} from "@lodestar/utils";
3
4
  import {GossipActionError} from "./gossipValidation.js";
@@ -6,6 +7,7 @@ export enum DataColumnSidecarErrorCode {
6
7
  INVALID_INDEX = "DATA_COLUMN_SIDECAR_ERROR_INVALID_INDEX",
7
8
  NO_COMMITMENTS = "DATA_COLUMN_SIDECAR_ERROR_NO_COMMITMENTS",
8
9
  MISMATCHED_LENGTHS = "DATA_COLUMN_SIDECAR_ERROR_MISMATCHED_LENGTHS",
10
+ INCORRECT_TYPE = "DATA_COLUMN_SIDECAR_ERROR_INCORRECT_TYPE",
9
11
  INVALID_SUBNET = "DATA_COLUMN_SIDECAR_ERROR_INVALID_SUBNET",
10
12
  INVALID_KZG_PROOF = "DATA_COLUMN_SIDECAR_ERROR_INVALID_KZG_PROOF",
11
13
  TOO_MANY_KZG_COMMITMENTS = "DATA_COLUMN_SIDECAR_ERROR_TOO_MANY_KZG_COMMITMENTS",
@@ -18,6 +20,10 @@ export enum DataColumnSidecarErrorCode {
18
20
  INCORRECT_SIDECAR_COUNT = "DATA_COLUMN_SIDECAR_ERROR_INCORRECT_SIDECAR_COUNT",
19
21
  /** Sidecar doesn't match block */
20
22
  INCORRECT_BLOCK = "DATA_COLUMN_SIDECAR_ERROR_INCORRECT_BLOCK",
23
+ /** Sidecar slot doesn't match block slot */
24
+ INCORRECT_SIDECAR_SLOT = "DATA_COLUMN_SIDECAR_ERROR_INCORRECT_SIDECAR_SLOT",
25
+ /** Sidecar referenced block is not the expected block type */
26
+ INCORRECT_BLOCK_TYPE = "DATA_COLUMN_SIDECAR_ERROR_INCORRECT_BLOCK_TYPE",
21
27
  /** Sidecar cell count not as expected */
22
28
  INCORRECT_CELL_COUNT = "DATA_COLUMN_SIDECAR_ERROR_INCORRECT_CELL_COUNT",
23
29
  /** Sidecar kzg proof count not as expected */
@@ -32,10 +38,12 @@ export enum DataColumnSidecarErrorCode {
32
38
  FUTURE_SLOT = "DATA_COLUMN_SIDECAR_ERROR_FUTURE_SLOT",
33
39
  WOULD_REVERT_FINALIZED_SLOT = "DATA_COLUMN_SIDECAR_ERROR_WOULD_REVERT_FINALIZED_SLOT",
34
40
  PARENT_UNKNOWN = "DATA_COLUMN_SIDECAR_ERROR_PARENT_UNKNOWN",
41
+ BLOCK_UNKNOWN = "DATA_COLUMN_SIDECAR_ERROR_BLOCK_UNKNOWN",
35
42
  NOT_LATER_THAN_PARENT = "DATA_COLUMN_SIDECAR_ERROR_NOT_LATER_THAN_PARENT",
36
43
  PROPOSAL_SIGNATURE_INVALID = "DATA_COLUMN_SIDECAR_ERROR_PROPOSAL_SIGNATURE_INVALID",
37
44
  INCLUSION_PROOF_INVALID = "DATA_COLUMN_SIDECAR_ERROR_INCLUSION_PROOF_INVALID",
38
45
  INCORRECT_PROPOSER = "DATA_COLUMN_SIDECAR_ERROR_INCORRECT_PROPOSER",
46
+ PAYLOAD_ENVELOPE_INPUT_MISSING = "DATA_COLUMN_SIDECAR_ERROR_PAYLOAD_ENVELOPE_INPUT_MISSING",
39
47
  }
40
48
 
41
49
  export type DataColumnSidecarErrorType =
@@ -47,6 +55,12 @@ export type DataColumnSidecarErrorType =
47
55
  commitmentsLength: number;
48
56
  proofsLength: number;
49
57
  }
58
+ | {
59
+ code: DataColumnSidecarErrorCode.INCORRECT_TYPE;
60
+ slot: Slot;
61
+ columnIndex: number;
62
+ fork: ForkName;
63
+ }
50
64
  | {code: DataColumnSidecarErrorCode.INVALID_SUBNET; columnIndex: number; gossipSubnet: SubnetID}
51
65
  | {
52
66
  code: DataColumnSidecarErrorCode.TOO_MANY_KZG_COMMITMENTS;
@@ -63,6 +77,11 @@ export type DataColumnSidecarErrorType =
63
77
  parentRoot: RootHex;
64
78
  slot: Slot;
65
79
  }
80
+ | {
81
+ code: DataColumnSidecarErrorCode.BLOCK_UNKNOWN;
82
+ blockRoot: RootHex;
83
+ slot: Slot;
84
+ }
66
85
  | {
67
86
  code: DataColumnSidecarErrorCode.PROPOSAL_SIGNATURE_INVALID;
68
87
  slot: Slot;
@@ -80,6 +99,17 @@ export type DataColumnSidecarErrorType =
80
99
  expected: string;
81
100
  actual: string;
82
101
  }
102
+ | {
103
+ code: DataColumnSidecarErrorCode.INCORRECT_BLOCK_TYPE;
104
+ slot: Slot;
105
+ columnIndex: number;
106
+ }
107
+ | {
108
+ code: DataColumnSidecarErrorCode.INCORRECT_SIDECAR_SLOT;
109
+ columnIndex: number;
110
+ expected: Slot;
111
+ actual: Slot;
112
+ }
83
113
  | {
84
114
  code: DataColumnSidecarErrorCode.INCORRECT_HEADER_ROOT;
85
115
  slot: number;
@@ -97,7 +127,8 @@ export type DataColumnSidecarErrorType =
97
127
  actual: number;
98
128
  }
99
129
  | {code: DataColumnSidecarErrorCode.INVALID_KZG_PROOF_BATCH; slot: number; reason: string}
100
- | {code: DataColumnSidecarErrorCode.INCORRECT_PROPOSER; actualProposerIndex: number; expectedProposerIndex: number};
130
+ | {code: DataColumnSidecarErrorCode.INCORRECT_PROPOSER; actualProposerIndex: number; expectedProposerIndex: number}
131
+ | {code: DataColumnSidecarErrorCode.PAYLOAD_ENVELOPE_INPUT_MISSING; slot: Slot; blockRoot: RootHex};
101
132
 
102
133
  export class DataColumnSidecarGossipError extends GossipActionError<DataColumnSidecarErrorType> {}
103
134
  export class DataColumnSidecarValidationError extends LodestarError<DataColumnSidecarErrorType> {}
@@ -12,16 +12,12 @@ import {
12
12
  } from "@lodestar/fork-choice";
13
13
  import {ZERO_HASH_HEX} from "@lodestar/params";
14
14
  import {
15
- CachedBeaconStateAllForks,
16
- CachedBeaconStateGloas,
17
15
  DataAvailabilityStatus,
18
- computeAnchorCheckpoint,
16
+ IBeaconStateView,
19
17
  computeEpochAtSlot,
20
18
  computeStartSlotAtEpoch,
21
- getBlockRootAtSlot,
22
- getEffectiveBalanceIncrementsZeroInactive,
23
- isExecutionStateType,
24
- isMergeTransitionComplete,
19
+ isStatePostBellatrix,
20
+ isStatePostGloas,
25
21
  } from "@lodestar/state-transition";
26
22
  import {Slot, ssz} from "@lodestar/types";
27
23
  import {Logger, toRootHex} from "@lodestar/utils";
@@ -46,7 +42,7 @@ export function initializeForkChoice(
46
42
  config: ChainForkConfig,
47
43
  emitter: ChainEventEmitter,
48
44
  currentSlot: Slot,
49
- state: CachedBeaconStateAllForks,
45
+ state: IBeaconStateView,
50
46
  isFinalizedState: boolean,
51
47
  opts: ForkChoiceOpts,
52
48
  justifiedBalancesGetter: JustifiedBalancesGetter,
@@ -83,13 +79,13 @@ export function initializeForkChoiceFromFinalizedState(
83
79
  config: ChainForkConfig,
84
80
  emitter: ChainEventEmitter,
85
81
  currentSlot: Slot,
86
- state: CachedBeaconStateAllForks,
82
+ state: IBeaconStateView,
87
83
  opts: ForkChoiceOpts,
88
84
  justifiedBalancesGetter: JustifiedBalancesGetter,
89
85
  metrics: Metrics | null,
90
86
  logger?: Logger
91
87
  ): ForkChoice {
92
- const {blockHeader, checkpoint} = computeAnchorCheckpoint(config, state);
88
+ const {blockHeader, checkpoint} = state.computeAnchorCheckpoint();
93
89
  const finalizedCheckpoint = {...checkpoint};
94
90
  const justifiedCheckpoint = {
95
91
  ...checkpoint,
@@ -100,19 +96,19 @@ export function initializeForkChoiceFromFinalizedState(
100
96
  epoch: checkpoint.epoch === 0 ? checkpoint.epoch : checkpoint.epoch + 1,
101
97
  };
102
98
 
103
- const justifiedBalances = getEffectiveBalanceIncrementsZeroInactive(state);
99
+ const justifiedBalances = state.getEffectiveBalanceIncrementsZeroInactive();
104
100
 
105
101
  // forkchoiceConstructor is only used for some test cases
106
102
  // production code use ForkChoice constructor directly
107
103
  const forkchoiceConstructor = opts.forkchoiceConstructor ?? ForkChoice;
108
104
 
109
- const isForkPostGloas = (state as CachedBeaconStateGloas).latestBlockHash !== undefined;
105
+ const isForkPostGloas = computeEpochAtSlot(state.slot) >= config.GLOAS_FORK_EPOCH;
110
106
 
111
107
  // Determine justified checkpoint payload status
112
- const justifiedPayloadStatus = getCheckpointPayloadStatus(state, justifiedCheckpoint.epoch);
108
+ const justifiedPayloadStatus = getCheckpointPayloadStatus(config, state, justifiedCheckpoint.epoch);
113
109
 
114
110
  // Determine finalized checkpoint payload status
115
- const finalizedPayloadStatus = getCheckpointPayloadStatus(state, finalizedCheckpoint.epoch);
111
+ const finalizedPayloadStatus = getCheckpointPayloadStatus(config, state, finalizedCheckpoint.epoch);
116
112
 
117
113
  return new forkchoiceConstructor(
118
114
  config,
@@ -148,21 +144,23 @@ export function initializeForkChoiceFromFinalizedState(
148
144
  unrealizedFinalizedEpoch: finalizedCheckpoint.epoch,
149
145
  unrealizedFinalizedRoot: toRootHex(finalizedCheckpoint.root),
150
146
 
151
- ...(isExecutionStateType(state) && isMergeTransitionComplete(state)
147
+ ...(isStatePostBellatrix(state) && state.isExecutionStateType && state.isMergeTransitionComplete
152
148
  ? {
153
- executionPayloadBlockHash: toRootHex(state.latestExecutionPayloadHeader.blockHash),
154
- executionPayloadNumber: state.latestExecutionPayloadHeader.blockNumber,
149
+ executionPayloadBlockHash: toRootHex(state.latestBlockHash),
150
+ // TODO GLOAS: executionPayloadNumber is not tracked in BeaconState post-gloas (EIP-7732 removed
151
+ // latestExecutionPayloadHeader). Using 0 as unavailable fallback until a solution is found.
152
+ executionPayloadNumber: isStatePostGloas(state) ? 0 : state.payloadBlockNumber,
155
153
  executionStatus: blockHeader.slot === GENESIS_SLOT ? ExecutionStatus.Valid : ExecutionStatus.Syncing,
156
154
  }
157
155
  : {executionPayloadBlockHash: null, executionStatus: ExecutionStatus.PreMerge}),
158
156
 
159
157
  dataAvailabilityStatus: DataAvailabilityStatus.PreData,
160
158
  payloadStatus: isForkPostGloas ? PayloadStatus.PENDING : PayloadStatus.FULL, // TODO GLOAS: Post-gloas how do we know if the checkpoint payload is FULL or EMPTY?
161
- parentBlockHash: isForkPostGloas ? toRootHex((state as CachedBeaconStateGloas).latestBlockHash) : null,
159
+ parentBlockHash: isStatePostGloas(state) ? toRootHex(state.latestBlockHash) : null,
162
160
  },
163
161
  currentSlot
164
162
  ),
165
- state.validators.length,
163
+ state.validatorCount,
166
164
  metrics,
167
165
  opts,
168
166
  logger
@@ -176,15 +174,15 @@ export function initializeForkChoiceFromUnfinalizedState(
176
174
  config: ChainForkConfig,
177
175
  emitter: ChainEventEmitter,
178
176
  currentSlot: Slot,
179
- unfinalizedState: CachedBeaconStateAllForks,
177
+ unfinalizedState: IBeaconStateView,
180
178
  opts: ForkChoiceOpts,
181
179
  justifiedBalancesGetter: JustifiedBalancesGetter,
182
180
  metrics: Metrics | null,
183
181
  logger?: Logger
184
182
  ): ForkChoice {
185
- const {blockHeader} = computeAnchorCheckpoint(config, unfinalizedState);
186
- const finalizedCheckpoint = unfinalizedState.finalizedCheckpoint.toValue();
187
- const justifiedCheckpoint = unfinalizedState.currentJustifiedCheckpoint.toValue();
183
+ const {blockHeader} = unfinalizedState.computeAnchorCheckpoint();
184
+ const finalizedCheckpoint = unfinalizedState.finalizedCheckpoint;
185
+ const justifiedCheckpoint = unfinalizedState.currentJustifiedCheckpoint;
188
186
  const headRoot = toRootHex(ssz.phase0.BeaconBlockHeader.hashTreeRoot(blockHeader));
189
187
 
190
188
  const logCtx = {
@@ -200,14 +198,14 @@ export function initializeForkChoiceFromUnfinalizedState(
200
198
  logger?.warn("Initializing fork choice from unfinalized state", logCtx);
201
199
 
202
200
  // this is not the justified state, but there is no other ways to get justified balances
203
- const justifiedBalances = getEffectiveBalanceIncrementsZeroInactive(unfinalizedState);
201
+ const justifiedBalances = unfinalizedState.getEffectiveBalanceIncrementsZeroInactive();
204
202
 
205
- const isForkPostGloas = (unfinalizedState as CachedBeaconStateGloas).latestBlockHash !== undefined;
203
+ const isForkPostGloas = computeEpochAtSlot(unfinalizedState.slot) >= config.GLOAS_FORK_EPOCH;
206
204
 
207
205
  // For unfinalized state, use getCheckpointPayloadStatus to determine the correct status.
208
206
  // It checks state.execution_payload_availability to determine EMPTY vs FULL.
209
- const justifiedPayloadStatus = getCheckpointPayloadStatus(unfinalizedState, justifiedCheckpoint.epoch);
210
- const finalizedPayloadStatus = getCheckpointPayloadStatus(unfinalizedState, finalizedCheckpoint.epoch);
207
+ const justifiedPayloadStatus = getCheckpointPayloadStatus(config, unfinalizedState, justifiedCheckpoint.epoch);
208
+ const finalizedPayloadStatus = getCheckpointPayloadStatus(config, unfinalizedState, finalizedCheckpoint.epoch);
211
209
 
212
210
  const store = new ForkChoiceStore(
213
211
  currentSlot,
@@ -241,17 +239,21 @@ export function initializeForkChoiceFromUnfinalizedState(
241
239
  unrealizedFinalizedEpoch: finalizedCheckpoint.epoch,
242
240
  unrealizedFinalizedRoot: toRootHex(finalizedCheckpoint.root),
243
241
 
244
- ...(isExecutionStateType(unfinalizedState) && isMergeTransitionComplete(unfinalizedState)
242
+ ...(isStatePostBellatrix(unfinalizedState) &&
243
+ unfinalizedState.isExecutionStateType &&
244
+ unfinalizedState.isMergeTransitionComplete
245
245
  ? {
246
- executionPayloadBlockHash: toRootHex(unfinalizedState.latestExecutionPayloadHeader.blockHash),
247
- executionPayloadNumber: unfinalizedState.latestExecutionPayloadHeader.blockNumber,
246
+ executionPayloadBlockHash: toRootHex(unfinalizedState.latestBlockHash),
247
+ // TODO GLOAS: executionPayloadNumber is not tracked in BeaconState post-gloas (EIP-7732 removed
248
+ // latestExecutionPayloadHeader). Using 0 as unavailable fallback until a solution is found.
249
+ executionPayloadNumber: isStatePostGloas(unfinalizedState) ? 0 : unfinalizedState.payloadBlockNumber,
248
250
  executionStatus: blockHeader.slot === GENESIS_SLOT ? ExecutionStatus.Valid : ExecutionStatus.Syncing,
249
251
  }
250
252
  : {executionPayloadBlockHash: null, executionStatus: ExecutionStatus.PreMerge}),
251
253
 
252
254
  dataAvailabilityStatus: DataAvailabilityStatus.PreData,
253
255
  payloadStatus: isForkPostGloas ? PayloadStatus.PENDING : PayloadStatus.FULL, // TODO GLOAS: Post-gloas how do we know if the checkpoint payload is FULL or EMPTY?
254
- parentBlockHash: isForkPostGloas ? toRootHex((unfinalizedState as CachedBeaconStateGloas).latestBlockHash) : null,
256
+ parentBlockHash: isStatePostGloas(unfinalizedState) ? toRootHex(unfinalizedState.latestBlockHash) : null,
255
257
  };
256
258
 
257
259
  const parentSlot = blockHeader.slot - 1;
@@ -265,7 +267,7 @@ export function initializeForkChoiceFromUnfinalizedState(
265
267
  // dummy data, we're not able to regen state before headBlock
266
268
  stateRoot: ZERO_HASH_HEX,
267
269
  blockRoot: headBlock.parentRoot,
268
- targetRoot: toRootHex(getBlockRootAtSlot(unfinalizedState, computeStartSlotAtEpoch(parentEpoch))),
270
+ targetRoot: toRootHex(unfinalizedState.getBlockRootAtSlot(computeStartSlotAtEpoch(parentEpoch))),
269
271
  };
270
272
 
271
273
  const justifiedBlock: ProtoBlock = {
@@ -303,13 +305,5 @@ export function initializeForkChoiceFromUnfinalizedState(
303
305
  // production code use ForkChoice constructor directly
304
306
  const forkchoiceConstructor = opts.forkchoiceConstructor ?? ForkChoice;
305
307
 
306
- return new forkchoiceConstructor(
307
- config,
308
- store,
309
- protoArray,
310
- unfinalizedState.validators.length,
311
- metrics,
312
- opts,
313
- logger
314
- );
308
+ return new forkchoiceConstructor(config, store, protoArray, unfinalizedState.validatorCount, metrics, opts, logger);
315
309
  }
@@ -1,6 +1,11 @@
1
1
  import {ChainForkConfig} from "@lodestar/config";
2
2
  import {ZERO_HASH} from "@lodestar/params";
3
- import {BeaconStateAllForks, computeEpochAtSlot, computeStartSlotAtEpoch} from "@lodestar/state-transition";
3
+ import {
4
+ BeaconStateAllForks,
5
+ IBeaconStateView,
6
+ computeEpochAtSlot,
7
+ computeStartSlotAtEpoch,
8
+ } from "@lodestar/state-transition";
4
9
  import {SignedBeaconBlock, ssz} from "@lodestar/types";
5
10
  import {Logger, byteArrayEquals, toHex, toRootHex} from "@lodestar/utils";
6
11
  import {GENESIS_SLOT} from "../constants/index.js";
@@ -119,7 +124,7 @@ export async function checkAndPersistAnchorState(
119
124
  }
120
125
  }
121
126
 
122
- export function initBeaconMetrics(metrics: Metrics, state: BeaconStateAllForks): void {
127
+ export function initBeaconMetrics(metrics: Metrics, state: IBeaconStateView): void {
123
128
  metrics.headSlot.set(state.slot);
124
129
  metrics.previousJustifiedEpoch.set(state.previousJustifiedCheckpoint.epoch);
125
130
  metrics.currentJustifiedEpoch.set(state.currentJustifiedCheckpoint.epoch);
@@ -1,11 +1,11 @@
1
- import {CompositeTypeAny, TreeView, Type} from "@chainsafe/ssz";
1
+ import {Type} from "@chainsafe/ssz";
2
2
  import {BeaconConfig} from "@lodestar/config";
3
3
  import {CheckpointWithHex, CheckpointWithPayloadStatus, IForkChoice, ProtoBlock} from "@lodestar/fork-choice";
4
- import {BeaconStateAllForks, CachedBeaconStateAllForks, EpochShuffling, PubkeyCache} from "@lodestar/state-transition";
4
+ import {EpochShuffling, IBeaconStateView, PubkeyCache} from "@lodestar/state-transition";
5
5
  import {
6
6
  BeaconBlock,
7
7
  BlindedBeaconBlock,
8
- DataColumnSidecars,
8
+ DataColumnSidecar,
9
9
  Epoch,
10
10
  Root,
11
11
  RootHex,
@@ -18,6 +18,7 @@ import {
18
18
  altair,
19
19
  capella,
20
20
  deneb,
21
+ gloas,
21
22
  phase0,
22
23
  rewards,
23
24
  } from "@lodestar/types";
@@ -159,6 +160,8 @@ export interface IBeaconChain {
159
160
  close(): Promise<void>;
160
161
  /** Chain has seen the specified block root or not. The block may not be processed yet, use forkchoice.hasBlock to check it */
161
162
  seenBlock(blockRoot: RootHex): boolean;
163
+ /** Chain has seen a SignedExecutionPayloadEnvelope for this block root (via seenCache or fork choice FULL variant) */
164
+ seenPayloadEnvelope(blockRoot: RootHex): boolean;
162
165
  /** Populate in-memory caches with persisted data. Call at least once on startup */
163
166
  loadFromDisk(): Promise<void>;
164
167
  /** Persist in-memory data to the DB. Call at least once before stopping the process */
@@ -166,9 +169,9 @@ export interface IBeaconChain {
166
169
 
167
170
  validatorSeenAtEpoch(index: ValidatorIndex, epoch: Epoch): boolean;
168
171
 
169
- getHeadState(): CachedBeaconStateAllForks;
170
- getHeadStateAtCurrentEpoch(regenCaller: RegenCaller): Promise<CachedBeaconStateAllForks>;
171
- getHeadStateAtEpoch(epoch: Epoch, regenCaller: RegenCaller): Promise<CachedBeaconStateAllForks>;
172
+ getHeadState(): IBeaconStateView;
173
+ getHeadStateAtCurrentEpoch(regenCaller: RegenCaller): Promise<IBeaconStateView>;
174
+ getHeadStateAtEpoch(epoch: Epoch, regenCaller: RegenCaller): Promise<IBeaconStateView>;
172
175
 
173
176
  getHistoricalStateBySlot(
174
177
  slot: Slot
@@ -178,22 +181,22 @@ export interface IBeaconChain {
178
181
  getStateBySlot(
179
182
  slot: Slot,
180
183
  opts?: StateGetOpts
181
- ): Promise<{state: CachedBeaconStateAllForks; executionOptimistic: boolean; finalized: boolean} | null>;
184
+ ): Promise<{state: IBeaconStateView; executionOptimistic: boolean; finalized: boolean} | null>;
182
185
  /** Returns a local state by state root */
183
186
  getStateByStateRoot(
184
187
  stateRoot: RootHex,
185
188
  opts?: StateGetOpts
186
- ): Promise<{state: CachedBeaconStateAllForks | Uint8Array; executionOptimistic: boolean; finalized: boolean} | null>;
189
+ ): Promise<{state: IBeaconStateView | Uint8Array; executionOptimistic: boolean; finalized: boolean} | null>;
187
190
  /** Return serialized bytes of a persisted checkpoint state */
188
191
  getPersistedCheckpointState(checkpoint?: phase0.Checkpoint): Promise<Uint8Array | null>;
189
192
  /** Returns a cached state by checkpoint */
190
193
  getStateByCheckpoint(
191
194
  checkpoint: CheckpointWithHex
192
- ): {state: BeaconStateAllForks; executionOptimistic: boolean; finalized: boolean} | null;
195
+ ): {state: IBeaconStateView; executionOptimistic: boolean; finalized: boolean} | null;
193
196
  /** Return state bytes by checkpoint */
194
197
  getStateOrBytesByCheckpoint(
195
198
  checkpoint: CheckpointWithPayloadStatus
196
- ): Promise<{state: CachedBeaconStateAllForks | Uint8Array; executionOptimistic: boolean; finalized: boolean} | null>;
199
+ ): Promise<{state: IBeaconStateView | Uint8Array; executionOptimistic: boolean; finalized: boolean} | null>;
197
200
 
198
201
  /**
199
202
  * Since we can have multiple parallel chains,
@@ -217,12 +220,17 @@ export interface IBeaconChain {
217
220
  ): Promise<{block: SignedBeaconBlock; executionOptimistic: boolean; finalized: boolean} | null>;
218
221
  getBlobSidecars(blockSlot: Slot, blockRootHex: string): Promise<deneb.BlobSidecars | null>;
219
222
  getSerializedBlobSidecars(blockSlot: Slot, blockRootHex: string): Promise<Uint8Array | null>;
220
- getDataColumnSidecars(blockSlot: Slot, blockRootHex: string): Promise<DataColumnSidecars>;
223
+ getDataColumnSidecars(blockSlot: Slot, blockRootHex: string): Promise<DataColumnSidecar[]>;
221
224
  getSerializedDataColumnSidecars(
222
225
  blockSlot: Slot,
223
226
  blockRootHex: string,
224
227
  indices: number[]
225
228
  ): Promise<(Uint8Array | undefined)[]>;
229
+ getSerializedExecutionPayloadEnvelope(blockSlot: Slot, blockRootHex: string): Promise<Uint8Array | null>;
230
+ getExecutionPayloadEnvelope(
231
+ blockSlot: Slot,
232
+ blockRootHex: string
233
+ ): Promise<gloas.SignedExecutionPayloadEnvelope | null>;
226
234
 
227
235
  produceCommonBlockBody(blockAttributes: BlockAttributes): Promise<CommonBlockBody>;
228
236
  produceBlock(blockAttributes: BlockAttributes & {commonBlockBodyPromise: Promise<CommonBlockBody>}): Promise<{
@@ -261,14 +269,12 @@ export interface IBeaconChain {
261
269
 
262
270
  persistBlock(data: BeaconBlock | BlindedBeaconBlock, suffix?: string): void;
263
271
  persistInvalidStateRoot(
264
- preState: CachedBeaconStateAllForks,
265
- postState: CachedBeaconStateAllForks,
272
+ preState: IBeaconStateView,
273
+ postState: IBeaconStateView,
266
274
  block: SignedBeaconBlock
267
275
  ): Promise<void>;
268
276
  persistInvalidSszValue<T>(type: Type<T>, sszObject: T | Uint8Array, suffix?: string): void;
269
277
  persistInvalidSszBytes(type: string, sszBytes: Uint8Array, suffix?: string): void;
270
- /** Persist bad items to persistInvalidSszObjectsDir dir, for example invalid state, attestations etc. */
271
- persistInvalidSszView(view: TreeView<CompositeTypeAny>, suffix?: string): void;
272
278
  regenStateForAttestationVerification(
273
279
  attEpoch: Epoch,
274
280
  shufflingDependentRoot: RootHex,
@@ -1,4 +1,4 @@
1
- import {BitArray, CompositeViewDU} from "@chainsafe/ssz";
1
+ import {BitArray} from "@chainsafe/ssz";
2
2
  import {routes} from "@lodestar/api";
3
3
  import {ChainForkConfig} from "@lodestar/config";
4
4
  import {
@@ -21,7 +21,7 @@ import {
21
21
  isForkPostElectra,
22
22
  } from "@lodestar/params";
23
23
  import {
24
- CachedBeaconStateAltair,
24
+ type IBeaconStateViewAltair,
25
25
  computeStartSlotAtEpoch,
26
26
  computeSyncPeriodAtEpoch,
27
27
  computeSyncPeriodAtSlot,
@@ -54,13 +54,7 @@ import {Metrics} from "../../metrics/index.js";
54
54
  import {IClock} from "../../util/clock.js";
55
55
  import {ChainEventEmitter} from "../emitter.js";
56
56
  import {LightClientServerError, LightClientServerErrorCode} from "../errors/lightClientError.js";
57
- import {
58
- getBlockBodyExecutionHeaderProof,
59
- getCurrentSyncCommitteeBranch,
60
- getFinalizedRootProof,
61
- getNextSyncCommitteeBranch,
62
- getSyncCommitteesWitness,
63
- } from "./proofs.js";
57
+ import {getBlockBodyExecutionHeaderProof, getCurrentSyncCommitteeBranch, getNextSyncCommitteeBranch} from "./proofs.js";
64
58
 
65
59
  export type LightClientServerOpts = {
66
60
  disableLightClientServerOnImportBlockHead?: boolean;
@@ -268,7 +262,7 @@ export class LightClientServer {
268
262
  */
269
263
  onImportBlockHead(
270
264
  block: BeaconBlock<ForkPostAltair>,
271
- postState: CachedBeaconStateAltair,
265
+ postState: IBeaconStateViewAltair,
272
266
  parentBlockSlot: Slot
273
267
  ): void {
274
268
  // TEMP: To disable this functionality for fork_choice spec tests.
@@ -278,6 +272,14 @@ export class LightClientServer {
278
272
  return;
279
273
  }
280
274
 
275
+ // TODO GLOAS: Light client updates for gloas are not yet updated in the spec.
276
+ // The block body no longer contains execution payload, so `blockToLightClientHeader`
277
+ // cannot construct a header from a gloas block. Skip all light client processing
278
+ // for post-gloas blocks, revisit once there is a spec for it.
279
+ if (this.config.getForkSeq(block.slot) >= ForkSeq.gloas) {
280
+ return;
281
+ }
282
+
281
283
  // What is the syncAggregate signing?
282
284
  // From the state-transition
283
285
  // ```
@@ -406,7 +408,7 @@ export class LightClientServer {
406
408
 
407
409
  private async persistPostBlockImportData(
408
410
  block: BeaconBlock<ForkPostAltair>,
409
- postState: CachedBeaconStateAltair,
411
+ postState: IBeaconStateViewAltair,
410
412
  parentBlockSlot: Slot
411
413
  ): Promise<void> {
412
414
  const blockSlot = block.slot;
@@ -416,7 +418,7 @@ export class LightClientServer {
416
418
  const blockRoot = ssz.phase0.BeaconBlockHeader.hashTreeRoot(header.beacon);
417
419
  const blockRootHex = toRootHex(blockRoot);
418
420
 
419
- const syncCommitteeWitness = getSyncCommitteesWitness(fork, postState);
421
+ const syncCommitteeWitness = postState.getSyncCommitteesWitness();
420
422
 
421
423
  // Only store current sync committee once per run
422
424
  if (!this.storedCurrentSyncCommittee) {
@@ -466,7 +468,7 @@ export class LightClientServer {
466
468
  isFinalized: true,
467
469
  attestedHeader: header,
468
470
  blockRoot,
469
- finalityBranch: getFinalizedRootProof(postState),
471
+ finalityBranch: postState.getFinalizedRootProof(),
470
472
  finalizedCheckpoint,
471
473
  }
472
474
  : {
@@ -724,13 +726,10 @@ export class LightClientServer {
724
726
  );
725
727
  }
726
728
 
727
- private async storeSyncCommittee(
728
- syncCommittee: CompositeViewDU<typeof ssz.altair.SyncCommittee>,
729
- syncCommitteeRoot: Uint8Array
730
- ): Promise<void> {
729
+ private async storeSyncCommittee(syncCommittee: altair.SyncCommittee, syncCommitteeRoot: Uint8Array): Promise<void> {
731
730
  const isKnown = await this.db.syncCommittee.has(syncCommitteeRoot);
732
731
  if (!isKnown) {
733
- await this.db.syncCommittee.putBinary(syncCommitteeRoot, syncCommittee.serialize());
732
+ await this.db.syncCommittee.putBinary(syncCommitteeRoot, ssz.altair.SyncCommittee.serialize(syncCommittee));
734
733
  }
735
734
  }
736
735