@lodestar/beacon-node 1.42.0-dev.4411584fd8 → 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 (505) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +60 -29
  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 +54 -24
  68. package/lib/chain/blocks/importBlock.js.map +1 -1
  69. package/lib/chain/blocks/importExecutionPayload.d.ts +50 -0
  70. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -0
  71. package/lib/chain/blocks/importExecutionPayload.js +195 -0
  72. package/lib/chain/blocks/importExecutionPayload.js.map +1 -0
  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/index.d.ts +3 -0
  77. package/lib/chain/blocks/payloadEnvelopeInput/index.d.ts.map +1 -0
  78. package/lib/chain/blocks/payloadEnvelopeInput/index.js +3 -0
  79. package/lib/chain/blocks/payloadEnvelopeInput/index.js.map +1 -0
  80. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +88 -0
  81. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -0
  82. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +279 -0
  83. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -0
  84. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +30 -0
  85. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -0
  86. package/lib/chain/blocks/payloadEnvelopeInput/types.js +11 -0
  87. package/lib/chain/blocks/payloadEnvelopeInput/types.js.map +1 -0
  88. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +15 -0
  89. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts.map +1 -0
  90. package/lib/chain/blocks/payloadEnvelopeProcessor.js +46 -0
  91. package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -0
  92. package/lib/chain/blocks/types.d.ts +28 -15
  93. package/lib/chain/blocks/types.d.ts.map +1 -1
  94. package/lib/chain/blocks/types.js.map +1 -1
  95. package/lib/chain/blocks/utils/checkpoint.d.ts +2 -2
  96. package/lib/chain/blocks/utils/checkpoint.d.ts.map +1 -1
  97. package/lib/chain/blocks/utils/checkpoint.js.map +1 -1
  98. package/lib/chain/blocks/verifyBlock.d.ts +2 -2
  99. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  100. package/lib/chain/blocks/verifyBlock.js +4 -4
  101. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  102. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +5 -5
  103. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  104. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +5 -4
  105. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  106. package/lib/chain/blocks/verifyBlocksSignatures.d.ts +2 -2
  107. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  108. package/lib/chain/blocks/verifyBlocksSignatures.js +4 -2
  109. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  110. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts +3 -3
  111. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +1 -1
  112. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js +3 -3
  113. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
  114. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts +12 -0
  115. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts.map +1 -0
  116. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js +40 -0
  117. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js.map +1 -0
  118. package/lib/chain/chain.d.ts +22 -16
  119. package/lib/chain/chain.d.ts.map +1 -1
  120. package/lib/chain/chain.js +142 -69
  121. package/lib/chain/chain.js.map +1 -1
  122. package/lib/chain/emitter.d.ts +31 -9
  123. package/lib/chain/emitter.d.ts.map +1 -1
  124. package/lib/chain/emitter.js +12 -3
  125. package/lib/chain/emitter.js.map +1 -1
  126. package/lib/chain/errors/blockError.d.ts +10 -5
  127. package/lib/chain/errors/blockError.d.ts.map +1 -1
  128. package/lib/chain/errors/blockError.js +2 -0
  129. package/lib/chain/errors/blockError.js.map +1 -1
  130. package/lib/chain/errors/dataColumnSidecarError.d.ts +31 -1
  131. package/lib/chain/errors/dataColumnSidecarError.d.ts.map +1 -1
  132. package/lib/chain/errors/dataColumnSidecarError.js +7 -0
  133. package/lib/chain/errors/dataColumnSidecarError.js.map +1 -1
  134. package/lib/chain/errors/executionPayloadEnvelope.d.ts +12 -2
  135. package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
  136. package/lib/chain/errors/executionPayloadEnvelope.js +3 -1
  137. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
  138. package/lib/chain/forkChoice/index.d.ts +4 -4
  139. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  140. package/lib/chain/forkChoice/index.js +30 -34
  141. package/lib/chain/forkChoice/index.js.map +1 -1
  142. package/lib/chain/initState.d.ts +2 -2
  143. package/lib/chain/initState.d.ts.map +1 -1
  144. package/lib/chain/initState.js +1 -1
  145. package/lib/chain/initState.js.map +1 -1
  146. package/lib/chain/interface.d.ts +21 -17
  147. package/lib/chain/interface.d.ts.map +1 -1
  148. package/lib/chain/lightClient/index.d.ts +2 -2
  149. package/lib/chain/lightClient/index.d.ts.map +1 -1
  150. package/lib/chain/lightClient/index.js +11 -4
  151. package/lib/chain/lightClient/index.js.map +1 -1
  152. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +6 -6
  153. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  154. package/lib/chain/opPools/aggregatedAttestationPool.js +13 -13
  155. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  156. package/lib/chain/opPools/executionPayloadBidPool.d.ts +2 -2
  157. package/lib/chain/opPools/executionPayloadBidPool.d.ts.map +1 -1
  158. package/lib/chain/opPools/executionPayloadBidPool.js +2 -2
  159. package/lib/chain/opPools/executionPayloadBidPool.js.map +1 -1
  160. package/lib/chain/opPools/opPool.d.ts +3 -3
  161. package/lib/chain/opPools/opPool.d.ts.map +1 -1
  162. package/lib/chain/opPools/opPool.js +7 -7
  163. package/lib/chain/opPools/opPool.js.map +1 -1
  164. package/lib/chain/opPools/utils.d.ts +2 -2
  165. package/lib/chain/opPools/utils.d.ts.map +1 -1
  166. package/lib/chain/opPools/utils.js +1 -1
  167. package/lib/chain/opPools/utils.js.map +1 -1
  168. package/lib/chain/options.d.ts +1 -0
  169. package/lib/chain/options.d.ts.map +1 -1
  170. package/lib/chain/options.js +1 -0
  171. package/lib/chain/options.js.map +1 -1
  172. package/lib/chain/prepareNextSlot.d.ts +2 -2
  173. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  174. package/lib/chain/prepareNextSlot.js +10 -4
  175. package/lib/chain/prepareNextSlot.js.map +1 -1
  176. package/lib/chain/produceBlock/computeNewStateRoot.d.ts +4 -4
  177. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
  178. package/lib/chain/produceBlock/computeNewStateRoot.js +14 -10
  179. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  180. package/lib/chain/produceBlock/produceBlockBody.d.ts +7 -7
  181. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  182. package/lib/chain/produceBlock/produceBlockBody.js +32 -17
  183. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  184. package/lib/chain/regen/interface.d.ts +15 -13
  185. package/lib/chain/regen/interface.d.ts.map +1 -1
  186. package/lib/chain/regen/interface.js +2 -0
  187. package/lib/chain/regen/interface.js.map +1 -1
  188. package/lib/chain/regen/queued.d.ts +14 -14
  189. package/lib/chain/regen/queued.d.ts.map +1 -1
  190. package/lib/chain/regen/queued.js.map +1 -1
  191. package/lib/chain/regen/regen.d.ts +6 -5
  192. package/lib/chain/regen/regen.d.ts.map +1 -1
  193. package/lib/chain/regen/regen.js +6 -6
  194. package/lib/chain/regen/regen.js.map +1 -1
  195. package/lib/chain/seenCache/index.d.ts +1 -1
  196. package/lib/chain/seenCache/index.d.ts.map +1 -1
  197. package/lib/chain/seenCache/index.js +1 -1
  198. package/lib/chain/seenCache/index.js.map +1 -1
  199. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +1 -1
  200. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
  201. package/lib/chain/seenCache/seenGossipBlockInput.js +4 -4
  202. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  203. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +38 -0
  204. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -0
  205. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +76 -0
  206. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -0
  207. package/lib/chain/serializeState.d.ts +2 -2
  208. package/lib/chain/serializeState.d.ts.map +1 -1
  209. package/lib/chain/serializeState.js +1 -1
  210. package/lib/chain/serializeState.js.map +1 -1
  211. package/lib/chain/shufflingCache.d.ts +2 -2
  212. package/lib/chain/shufflingCache.d.ts.map +1 -1
  213. package/lib/chain/shufflingCache.js +3 -4
  214. package/lib/chain/shufflingCache.js.map +1 -1
  215. package/lib/chain/stateCache/fifoBlockStateCache.d.ts +6 -6
  216. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -1
  217. package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
  218. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +11 -11
  219. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  220. package/lib/chain/stateCache/persistentCheckpointsCache.js +12 -16
  221. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  222. package/lib/chain/stateCache/types.d.ts +14 -14
  223. package/lib/chain/stateCache/types.d.ts.map +1 -1
  224. package/lib/chain/stateCache/types.js.map +1 -1
  225. package/lib/chain/validation/attesterSlashing.js +3 -3
  226. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  227. package/lib/chain/validation/blobSidecar.js +1 -1
  228. package/lib/chain/validation/blobSidecar.js.map +1 -1
  229. package/lib/chain/validation/block.d.ts.map +1 -1
  230. package/lib/chain/validation/block.js +15 -6
  231. package/lib/chain/validation/block.js.map +1 -1
  232. package/lib/chain/validation/blsToExecutionChange.js +2 -2
  233. package/lib/chain/validation/blsToExecutionChange.js.map +1 -1
  234. package/lib/chain/validation/dataColumnSidecar.d.ts +11 -4
  235. package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
  236. package/lib/chain/validation/dataColumnSidecar.js +185 -6
  237. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  238. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  239. package/lib/chain/validation/executionPayloadBid.js +10 -7
  240. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  241. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
  242. package/lib/chain/validation/executionPayloadEnvelope.js +34 -19
  243. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  244. package/lib/chain/validation/payloadAttestationMessage.js +5 -3
  245. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
  246. package/lib/chain/validation/proposerSlashing.js +1 -1
  247. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  248. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts +2 -2
  249. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -1
  250. package/lib/chain/validation/signatureSets/contributionAndProof.js +1 -1
  251. package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
  252. package/lib/chain/validation/signatureSets/syncCommittee.d.ts +2 -2
  253. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -1
  254. package/lib/chain/validation/signatureSets/syncCommittee.js +1 -1
  255. package/lib/chain/validation/signatureSets/syncCommittee.js.map +1 -1
  256. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts +2 -2
  257. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -1
  258. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js.map +1 -1
  259. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts +2 -2
  260. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -1
  261. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js +1 -1
  262. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js.map +1 -1
  263. package/lib/chain/validation/syncCommittee.d.ts +4 -4
  264. package/lib/chain/validation/syncCommittee.d.ts.map +1 -1
  265. package/lib/chain/validation/syncCommittee.js +17 -12
  266. package/lib/chain/validation/syncCommittee.js.map +1 -1
  267. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
  268. package/lib/chain/validation/syncCommitteeContributionAndProof.js +5 -2
  269. package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
  270. package/lib/chain/validation/voluntaryExit.d.ts.map +1 -1
  271. package/lib/chain/validation/voluntaryExit.js +3 -3
  272. package/lib/chain/validation/voluntaryExit.js.map +1 -1
  273. package/lib/chain/validatorMonitor.d.ts +5 -4
  274. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  275. package/lib/chain/validatorMonitor.js +14 -9
  276. package/lib/chain/validatorMonitor.js.map +1 -1
  277. package/lib/db/buckets.d.ts +2 -2
  278. package/lib/db/buckets.d.ts.map +1 -1
  279. package/lib/db/buckets.js +2 -2
  280. package/lib/db/buckets.js.map +1 -1
  281. package/lib/db/repositories/blockArchiveIndex.d.ts +2 -2
  282. package/lib/db/repositories/blockArchiveIndex.d.ts.map +1 -1
  283. package/lib/db/repositories/dataColumnSidecar.d.ts.map +1 -1
  284. package/lib/db/repositories/dataColumnSidecar.js +4 -2
  285. package/lib/db/repositories/dataColumnSidecar.js.map +1 -1
  286. package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +1 -1
  287. package/lib/db/repositories/dataColumnSidecarArchive.js +4 -2
  288. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
  289. package/lib/metrics/metrics/lodestar.d.ts +60 -4
  290. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  291. package/lib/metrics/metrics/lodestar.js +126 -15
  292. package/lib/metrics/metrics/lodestar.js.map +1 -1
  293. package/lib/network/gossip/encoding.d.ts.map +1 -1
  294. package/lib/network/gossip/encoding.js +15 -0
  295. package/lib/network/gossip/encoding.js.map +1 -1
  296. package/lib/network/interface.d.ts +7 -4
  297. package/lib/network/interface.d.ts.map +1 -1
  298. package/lib/network/libp2p/index.d.ts.map +1 -1
  299. package/lib/network/libp2p/index.js +22 -11
  300. package/lib/network/libp2p/index.js.map +1 -1
  301. package/lib/network/network.d.ts +7 -4
  302. package/lib/network/network.d.ts.map +1 -1
  303. package/lib/network/network.js +12 -3
  304. package/lib/network/network.js.map +1 -1
  305. package/lib/network/options.d.ts.map +1 -1
  306. package/lib/network/options.js +7 -2
  307. package/lib/network/options.js.map +1 -1
  308. package/lib/network/processor/extractSlotRootFns.d.ts +1 -1
  309. package/lib/network/processor/extractSlotRootFns.d.ts.map +1 -1
  310. package/lib/network/processor/extractSlotRootFns.js +34 -4
  311. package/lib/network/processor/extractSlotRootFns.js.map +1 -1
  312. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  313. package/lib/network/processor/gossipHandlers.js +287 -70
  314. package/lib/network/processor/gossipHandlers.js.map +1 -1
  315. package/lib/network/processor/index.d.ts +22 -7
  316. package/lib/network/processor/index.d.ts.map +1 -1
  317. package/lib/network/processor/index.js +313 -80
  318. package/lib/network/processor/index.js.map +1 -1
  319. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -1
  320. package/lib/network/reqresp/ReqRespBeaconNode.js +9 -0
  321. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  322. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts +8 -0
  323. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts.map +1 -0
  324. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js +69 -0
  325. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js.map +1 -0
  326. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.d.ts +6 -0
  327. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.d.ts.map +1 -0
  328. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js +28 -0
  329. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js.map +1 -0
  330. package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
  331. package/lib/network/reqresp/handlers/index.js +11 -1
  332. package/lib/network/reqresp/handlers/index.js.map +1 -1
  333. package/lib/network/reqresp/protocols.d.ts +2 -0
  334. package/lib/network/reqresp/protocols.d.ts.map +1 -1
  335. package/lib/network/reqresp/protocols.js +10 -0
  336. package/lib/network/reqresp/protocols.js.map +1 -1
  337. package/lib/network/reqresp/rateLimit.d.ts.map +1 -1
  338. package/lib/network/reqresp/rateLimit.js +8 -0
  339. package/lib/network/reqresp/rateLimit.js.map +1 -1
  340. package/lib/network/reqresp/score.d.ts.map +1 -1
  341. package/lib/network/reqresp/score.js +2 -0
  342. package/lib/network/reqresp/score.js.map +1 -1
  343. package/lib/network/reqresp/types.d.ts +10 -4
  344. package/lib/network/reqresp/types.d.ts.map +1 -1
  345. package/lib/network/reqresp/types.js +16 -4
  346. package/lib/network/reqresp/types.js.map +1 -1
  347. package/lib/node/nodejs.d.ts +2 -2
  348. package/lib/node/nodejs.d.ts.map +1 -1
  349. package/lib/node/nodejs.js +3 -3
  350. package/lib/node/nodejs.js.map +1 -1
  351. package/lib/node/notifier.d.ts.map +1 -1
  352. package/lib/node/notifier.js +3 -3
  353. package/lib/node/notifier.js.map +1 -1
  354. package/lib/sync/backfill/backfill.d.ts +2 -2
  355. package/lib/sync/backfill/backfill.d.ts.map +1 -1
  356. package/lib/sync/backfill/backfill.js +2 -2
  357. package/lib/sync/backfill/backfill.js.map +1 -1
  358. package/lib/sync/unknownBlock.d.ts +3 -9
  359. package/lib/sync/unknownBlock.d.ts.map +1 -1
  360. package/lib/sync/unknownBlock.js +10 -43
  361. package/lib/sync/unknownBlock.js.map +1 -1
  362. package/lib/sync/utils/downloadByRange.d.ts +3 -3
  363. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  364. package/lib/sync/utils/downloadByRange.js +4 -2
  365. package/lib/sync/utils/downloadByRange.js.map +1 -1
  366. package/lib/sync/utils/downloadByRoot.d.ts +3 -3
  367. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  368. package/lib/sync/utils/downloadByRoot.js +10 -5
  369. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  370. package/lib/util/blobs.d.ts +3 -3
  371. package/lib/util/blobs.d.ts.map +1 -1
  372. package/lib/util/blobs.js +21 -10
  373. package/lib/util/blobs.js.map +1 -1
  374. package/lib/util/dataColumns.d.ts +18 -11
  375. package/lib/util/dataColumns.d.ts.map +1 -1
  376. package/lib/util/dataColumns.js +51 -17
  377. package/lib/util/dataColumns.js.map +1 -1
  378. package/lib/util/execution.d.ts +6 -2
  379. package/lib/util/execution.d.ts.map +1 -1
  380. package/lib/util/execution.js +49 -25
  381. package/lib/util/execution.js.map +1 -1
  382. package/lib/util/sszBytes.d.ts +29 -2
  383. package/lib/util/sszBytes.d.ts.map +1 -1
  384. package/lib/util/sszBytes.js +258 -14
  385. package/lib/util/sszBytes.js.map +1 -1
  386. package/lib/util/types.d.ts +2 -0
  387. package/lib/util/types.d.ts.map +1 -1
  388. package/lib/util/types.js +1 -0
  389. package/lib/util/types.js.map +1 -1
  390. package/package.json +16 -16
  391. package/src/api/impl/beacon/blocks/index.ts +69 -33
  392. package/src/api/impl/beacon/pool/index.ts +5 -1
  393. package/src/api/impl/beacon/state/index.ts +43 -55
  394. package/src/api/impl/beacon/state/utils.ts +11 -25
  395. package/src/api/impl/debug/index.ts +2 -2
  396. package/src/api/impl/lodestar/index.ts +8 -8
  397. package/src/api/impl/proof/index.ts +2 -9
  398. package/src/api/impl/validator/index.ts +38 -43
  399. package/src/api/impl/validator/utils.ts +4 -7
  400. package/src/chain/ColumnReconstructionTracker.ts +6 -5
  401. package/src/chain/GetBlobsTracker.ts +14 -12
  402. package/src/chain/archiveStore/archiveStore.ts +1 -0
  403. package/src/chain/archiveStore/historicalState/getHistoricalState.ts +10 -39
  404. package/src/chain/archiveStore/historicalState/historicalStateRegen.ts +2 -1
  405. package/src/chain/archiveStore/historicalState/types.ts +2 -0
  406. package/src/chain/archiveStore/historicalState/worker.ts +1 -4
  407. package/src/chain/archiveStore/interface.ts +1 -0
  408. package/src/chain/balancesCache.ts +5 -11
  409. package/src/chain/blocks/blockInput/blockInput.ts +8 -8
  410. package/src/chain/blocks/blockInput/types.ts +5 -4
  411. package/src/chain/blocks/importBlock.ts +85 -32
  412. package/src/chain/blocks/importExecutionPayload.ts +277 -0
  413. package/src/chain/blocks/index.ts +3 -2
  414. package/src/chain/blocks/payloadEnvelopeInput/index.ts +2 -0
  415. package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +377 -0
  416. package/src/chain/blocks/payloadEnvelopeInput/types.ts +34 -0
  417. package/src/chain/blocks/payloadEnvelopeProcessor.ts +61 -0
  418. package/src/chain/blocks/types.ts +34 -15
  419. package/src/chain/blocks/utils/checkpoint.ts +2 -2
  420. package/src/chain/blocks/verifyBlock.ts +5 -10
  421. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +10 -14
  422. package/src/chain/blocks/verifyBlocksSignatures.ts +10 -3
  423. package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +6 -8
  424. package/src/chain/blocks/writePayloadEnvelopeInputToDb.ts +55 -0
  425. package/src/chain/chain.ts +188 -101
  426. package/src/chain/emitter.ts +27 -9
  427. package/src/chain/errors/blockError.ts +8 -5
  428. package/src/chain/errors/dataColumnSidecarError.ts +32 -1
  429. package/src/chain/errors/executionPayloadEnvelope.ts +6 -2
  430. package/src/chain/forkChoice/index.ts +35 -51
  431. package/src/chain/initState.ts +7 -2
  432. package/src/chain/interface.ts +22 -18
  433. package/src/chain/lightClient/index.ts +17 -18
  434. package/src/chain/opPools/aggregatedAttestationPool.ts +20 -21
  435. package/src/chain/opPools/executionPayloadBidPool.ts +3 -3
  436. package/src/chain/opPools/opPool.ts +13 -14
  437. package/src/chain/opPools/utils.ts +3 -3
  438. package/src/chain/options.ts +2 -0
  439. package/src/chain/prepareNextSlot.ts +14 -8
  440. package/src/chain/produceBlock/computeNewStateRoot.ts +18 -16
  441. package/src/chain/produceBlock/produceBlockBody.ts +51 -48
  442. package/src/chain/regen/interface.ts +15 -17
  443. package/src/chain/regen/queued.ts +16 -20
  444. package/src/chain/regen/regen.ts +16 -17
  445. package/src/chain/seenCache/index.ts +1 -1
  446. package/src/chain/seenCache/seenGossipBlockInput.ts +4 -4
  447. package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +106 -0
  448. package/src/chain/serializeState.ts +3 -3
  449. package/src/chain/shufflingCache.ts +5 -7
  450. package/src/chain/stateCache/fifoBlockStateCache.ts +7 -7
  451. package/src/chain/stateCache/persistentCheckpointsCache.ts +27 -42
  452. package/src/chain/stateCache/types.ts +14 -18
  453. package/src/chain/validation/attesterSlashing.ts +3 -3
  454. package/src/chain/validation/blobSidecar.ts +1 -1
  455. package/src/chain/validation/block.ts +16 -10
  456. package/src/chain/validation/blsToExecutionChange.ts +2 -2
  457. package/src/chain/validation/dataColumnSidecar.ts +231 -8
  458. package/src/chain/validation/executionPayloadBid.ts +10 -10
  459. package/src/chain/validation/executionPayloadEnvelope.ts +42 -26
  460. package/src/chain/validation/payloadAttestationMessage.ts +6 -4
  461. package/src/chain/validation/proposerSlashing.ts +1 -1
  462. package/src/chain/validation/signatureSets/contributionAndProof.ts +2 -7
  463. package/src/chain/validation/signatureSets/syncCommittee.ts +2 -7
  464. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +2 -2
  465. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +2 -7
  466. package/src/chain/validation/syncCommittee.ts +25 -20
  467. package/src/chain/validation/syncCommitteeContributionAndProof.ts +9 -10
  468. package/src/chain/validation/voluntaryExit.ts +3 -8
  469. package/src/chain/validatorMonitor.ts +25 -13
  470. package/src/db/buckets.ts +2 -2
  471. package/src/db/repositories/dataColumnSidecar.ts +4 -2
  472. package/src/db/repositories/dataColumnSidecarArchive.ts +4 -2
  473. package/src/metrics/metrics/lodestar.ts +134 -19
  474. package/src/network/gossip/encoding.ts +16 -0
  475. package/src/network/interface.ts +18 -4
  476. package/src/network/libp2p/index.ts +24 -13
  477. package/src/network/network.ts +39 -8
  478. package/src/network/options.ts +7 -2
  479. package/src/network/processor/extractSlotRootFns.ts +43 -4
  480. package/src/network/processor/gossipHandlers.ts +356 -80
  481. package/src/network/processor/index.ts +395 -92
  482. package/src/network/reqresp/ReqRespBeaconNode.ts +13 -0
  483. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRange.ts +94 -0
  484. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRoot.ts +43 -0
  485. package/src/network/reqresp/handlers/index.ts +12 -0
  486. package/src/network/reqresp/protocols.ts +12 -0
  487. package/src/network/reqresp/rateLimit.ts +18 -0
  488. package/src/network/reqresp/score.ts +2 -0
  489. package/src/network/reqresp/types.ts +26 -5
  490. package/src/node/nodejs.ts +6 -5
  491. package/src/node/notifier.ts +5 -6
  492. package/src/sync/backfill/backfill.ts +3 -3
  493. package/src/sync/unknownBlock.ts +13 -53
  494. package/src/sync/utils/downloadByRange.ts +9 -7
  495. package/src/sync/utils/downloadByRoot.ts +16 -12
  496. package/src/util/blobs.ts +35 -15
  497. package/src/util/dataColumns.ts +69 -25
  498. package/src/util/execution.ts +49 -30
  499. package/src/util/sszBytes.ts +335 -13
  500. package/src/util/types.ts +6 -0
  501. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.d.ts +0 -15
  502. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.d.ts.map +0 -1
  503. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.js +0 -28
  504. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.js.map +0 -1
  505. package/src/chain/seenCache/seenExecutionPayloadEnvelope.ts +0 -34
@@ -15,15 +15,14 @@ import {
15
15
  isForkPostGloas,
16
16
  } from "@lodestar/params";
17
17
  import {
18
- CachedBeaconStateAllForks,
19
- CachedBeaconStateBellatrix,
20
- CachedBeaconStateCapella,
21
- CachedBeaconStateExecutions,
22
- CachedBeaconStateGloas,
23
18
  G2_POINT_AT_INFINITY,
19
+ IBeaconStateView,
20
+ type IBeaconStateViewBellatrix,
24
21
  computeTimeAtSlot,
25
- getExpectedWithdrawals,
26
- getRandaoMix,
22
+ isParentBlockFull,
23
+ isStatePostBellatrix,
24
+ isStatePostCapella,
25
+ isStatePostGloas,
27
26
  } from "@lodestar/state-transition";
28
27
  import {
29
28
  BLSPubkey,
@@ -113,11 +112,11 @@ export type ProduceFullGloas = {
113
112
  blobsBundle: BlobsBundle<ForkPostGloas>;
114
113
  cells: fulu.Cell[][];
115
114
  /**
116
- * Cached envelope state root computed during block production.
115
+ * Cached payload envelope state root computed during block production.
117
116
  * This is the state root after running `processExecutionPayloadEnvelope` on the
118
117
  * post-block state, and later used to construct the `ExecutionPayloadEnvelope`.
119
118
  */
120
- envelopeStateRoot: Root;
119
+ payloadEnvelopeStateRoot: Root;
121
120
  };
122
121
  export type ProduceFullFulu = {
123
122
  type: BlockType.Full;
@@ -161,7 +160,7 @@ export type ProduceResult =
161
160
  export async function produceBlockBody<T extends BlockType>(
162
161
  this: BeaconChain,
163
162
  blockType: T,
164
- currentState: CachedBeaconStateAllForks,
163
+ currentState: IBeaconStateView,
165
164
  blockAttr: BlockAttributes & {
166
165
  proposerIndex: ValidatorIndex;
167
166
  proposerPubKey: BLSPubkey;
@@ -201,10 +200,13 @@ export async function produceBlockBody<T extends BlockType>(
201
200
  this.logger.verbose("Producing beacon block body", logMeta);
202
201
 
203
202
  if (isForkPostGloas(fork)) {
203
+ if (!isStatePostGloas(currentState)) {
204
+ throw new Error("Expected Gloas state for Gloas block production");
205
+ }
206
+
204
207
  // TODO GLOAS: support non self-building here, the block type differentiation between
205
208
  // full and blinded no longer makes sense in gloas, it might be a good idea to move
206
209
  // this into a completely separate function and have pre/post gloas more separated
207
- const gloasState = currentState as CachedBeaconStateGloas;
208
210
  const safeBlockHash = getSafeExecutionBlockHash(this.forkChoice);
209
211
  const finalizedBlockHash = this.forkChoice.getFinalizedBlock().executionPayloadBlockHash ?? ZERO_HASH_HEX;
210
212
  const feeRecipient = requestedFeeRecipient ?? this.beaconProposerCache.getOrDefault(proposerIndex);
@@ -225,7 +227,7 @@ export async function produceBlockBody<T extends BlockType>(
225
227
  parentBlockRoot,
226
228
  safeBlockHash,
227
229
  finalizedBlockHash ?? ZERO_HASH_HEX,
228
- gloasState,
230
+ currentState,
229
231
  feeRecipient
230
232
  );
231
233
 
@@ -259,10 +261,10 @@ export async function produceBlockBody<T extends BlockType>(
259
261
 
260
262
  // Create self-build execution payload bid
261
263
  const bid: gloas.ExecutionPayloadBid = {
262
- parentBlockHash: gloasState.latestBlockHash,
264
+ parentBlockHash: currentState.latestBlockHash,
263
265
  parentBlockRoot: parentBlockRoot,
264
266
  blockHash: executionPayload.blockHash,
265
- prevRandao: getRandaoMix(gloasState, gloasState.epochCtx.epoch),
267
+ prevRandao: currentState.getRandaoMix(currentState.epoch),
266
268
  feeRecipient: executionPayload.feeRecipient,
267
269
  gasLimit: BigInt(executionPayload.gasLimit),
268
270
  builderIndex: BUILDER_INDEX_SELF_BUILD,
@@ -308,6 +310,10 @@ export async function produceBlockBody<T extends BlockType>(
308
310
  shouldOverrideBuilder,
309
311
  });
310
312
  } else if (isForkPostBellatrix(fork)) {
313
+ if (!isStatePostBellatrix(currentState)) {
314
+ throw new Error("Expected Bellatrix state for execution block production");
315
+ }
316
+
311
317
  const safeBlockHash = getSafeExecutionBlockHash(this.forkChoice);
312
318
  const finalizedBlockHash = this.forkChoice.getFinalizedBlock().executionPayloadBlockHash ?? ZERO_HASH_HEX;
313
319
  const feeRecipient = requestedFeeRecipient ?? this.beaconProposerCache.getOrDefault(proposerIndex);
@@ -336,7 +342,7 @@ export async function produceBlockBody<T extends BlockType>(
336
342
  parentBlockRoot,
337
343
  safeBlockHash,
338
344
  finalizedBlockHash ?? ZERO_HASH_HEX,
339
- currentState as CachedBeaconStateBellatrix,
345
+ currentState,
340
346
  executionBuilder.issueLocalFcUWithFeeRecipient
341
347
  );
342
348
  }
@@ -348,12 +354,7 @@ export async function produceBlockBody<T extends BlockType>(
348
354
  slot: blockSlot,
349
355
  proposerPubKey: toHex(proposerPubKey),
350
356
  });
351
- const headerRes = await prepareExecutionPayloadHeader(
352
- this,
353
- fork,
354
- currentState as CachedBeaconStateBellatrix,
355
- proposerPubKey
356
- );
357
+ const headerRes = await prepareExecutionPayloadHeader(this, fork, currentState, proposerPubKey);
357
358
 
358
359
  endExecutionPayloadHeader?.({
359
360
  step: BlockProductionStep.executionPayload,
@@ -388,7 +389,7 @@ export async function produceBlockBody<T extends BlockType>(
388
389
  });
389
390
  } else {
390
391
  const headerGasLimit = builderRes.header.gasLimit;
391
- const parentGasLimit = (currentState as CachedBeaconStateBellatrix).latestExecutionPayloadHeader.gasLimit;
392
+ const parentGasLimit = currentState.latestExecutionPayloadHeader.gasLimit;
392
393
  const expectedGasLimit = getExpectedGasLimit(parentGasLimit, targetGasLimit);
393
394
 
394
395
  const lowerBound = Math.min(parentGasLimit, expectedGasLimit);
@@ -449,7 +450,7 @@ export async function produceBlockBody<T extends BlockType>(
449
450
  parentBlockRoot,
450
451
  safeBlockHash,
451
452
  finalizedBlockHash ?? ZERO_HASH_HEX,
452
- currentState as CachedBeaconStateExecutions,
453
+ currentState,
453
454
  feeRecipient
454
455
  );
455
456
 
@@ -614,14 +615,12 @@ export async function prepareExecutionPayload(
614
615
  parentBlockRoot: Root,
615
616
  safeBlockHash: RootHex,
616
617
  finalizedBlockHash: RootHex,
617
- state: CachedBeaconStateExecutions | CachedBeaconStateGloas,
618
+ state: IBeaconStateViewBellatrix,
618
619
  suggestedFeeRecipient: string
619
620
  ): Promise<{prepType: PayloadPreparationType; payloadId: PayloadId}> {
620
- const parentHash = isForkPostGloas(fork)
621
- ? (state as CachedBeaconStateGloas).latestBlockHash
622
- : (state as CachedBeaconStateExecutions).latestExecutionPayloadHeader.blockHash;
621
+ const parentHash = state.latestBlockHash;
623
622
  const timestamp = computeTimeAtSlot(chain.config, state.slot, state.genesisTime);
624
- const prevRandao = getRandaoMix(state, state.epochCtx.epoch);
623
+ const prevRandao = state.getRandaoMix(state.epoch);
625
624
 
626
625
  const payloadIdCached = chain.executionEngine.payloadIdCache.get({
627
626
  headBlockHash: toRootHex(parentHash),
@@ -684,7 +683,7 @@ async function prepareExecutionPayloadHeader(
684
683
  config: ChainForkConfig;
685
684
  },
686
685
  fork: ForkPostBellatrix,
687
- state: CachedBeaconStateBellatrix,
686
+ state: IBeaconStateViewBellatrix,
688
687
  proposerPubKey: BLSPubkey
689
688
  ): Promise<{
690
689
  header: ExecutionPayloadHeader;
@@ -711,16 +710,9 @@ export function getPayloadAttributesForSSE(
711
710
  prepareSlot,
712
711
  parentBlockRoot,
713
712
  feeRecipient,
714
- }: {
715
- prepareState: CachedBeaconStateExecutions | CachedBeaconStateGloas;
716
- prepareSlot: Slot;
717
- parentBlockRoot: Root;
718
- feeRecipient: string;
719
- }
713
+ }: {prepareState: IBeaconStateViewBellatrix; prepareSlot: Slot; parentBlockRoot: Root; feeRecipient: string}
720
714
  ): SSEPayloadAttributes {
721
- const parentHash = isForkPostGloas(fork)
722
- ? (prepareState as CachedBeaconStateGloas).latestBlockHash
723
- : (prepareState as CachedBeaconStateExecutions).latestExecutionPayloadHeader.blockHash;
715
+ const parentHash = prepareState.latestBlockHash;
724
716
  const payloadAttributes = preparePayloadAttributes(fork, chain, {
725
717
  prepareState,
726
718
  prepareSlot,
@@ -736,11 +728,11 @@ export function getPayloadAttributesForSSE(
736
728
  }
737
729
  parentBlockNumber = parentBlock.executionPayloadNumber;
738
730
  } else {
739
- parentBlockNumber = (prepareState as CachedBeaconStateExecutions).latestExecutionPayloadHeader.blockNumber;
731
+ parentBlockNumber = prepareState.payloadBlockNumber;
740
732
  }
741
733
 
742
734
  const ssePayloadAttributes: SSEPayloadAttributes = {
743
- proposerIndex: prepareState.epochCtx.getBeaconProposer(prepareSlot),
735
+ proposerIndex: prepareState.getBeaconProposer(prepareSlot),
744
736
  proposalSlot: prepareSlot,
745
737
  parentBlockNumber,
746
738
  parentBlockRoot,
@@ -761,14 +753,14 @@ function preparePayloadAttributes(
761
753
  parentBlockRoot,
762
754
  feeRecipient,
763
755
  }: {
764
- prepareState: CachedBeaconStateExecutions | CachedBeaconStateGloas;
756
+ prepareState: IBeaconStateViewBellatrix;
765
757
  prepareSlot: Slot;
766
758
  parentBlockRoot: Root;
767
759
  feeRecipient: string;
768
760
  }
769
761
  ): SSEPayloadAttributes["payloadAttributes"] {
770
762
  const timestamp = computeTimeAtSlot(chain.config, prepareSlot, prepareState.genesisTime);
771
- const prevRandao = getRandaoMix(prepareState, prepareState.epochCtx.epoch);
763
+ const prevRandao = prepareState.getRandaoMix(prepareState.epoch);
772
764
  const payloadAttributes = {
773
765
  timestamp,
774
766
  prevRandao,
@@ -776,11 +768,22 @@ function preparePayloadAttributes(
776
768
  };
777
769
 
778
770
  if (ForkSeq[fork] >= ForkSeq.capella) {
779
- // withdrawals logic is now fork aware as it changes on electra fork post capella
780
- (payloadAttributes as capella.SSEPayloadAttributes["payloadAttributes"]).withdrawals = getExpectedWithdrawals(
781
- ForkSeq[fork],
782
- prepareState as CachedBeaconStateCapella
783
- ).expectedWithdrawals;
771
+ if (!isStatePostCapella(prepareState)) {
772
+ throw new Error("Expected Capella state for withdrawals");
773
+ }
774
+
775
+ if (isStatePostGloas(prepareState) && !isParentBlockFull(prepareState)) {
776
+ // When the parent block is empty, state.payloadExpectedWithdrawals holds a batch
777
+ // already deducted from CL balances but never credited on the EL (the envelope
778
+ // was not delivered). The next payload must carry those same withdrawals to
779
+ // restore CL/EL consistency, otherwise validators permanently lose that balance.
780
+ (payloadAttributes as capella.SSEPayloadAttributes["payloadAttributes"]).withdrawals =
781
+ prepareState.payloadExpectedWithdrawals;
782
+ } else {
783
+ // withdrawals logic is now fork aware as it changes on electra fork post capella
784
+ (payloadAttributes as capella.SSEPayloadAttributes["payloadAttributes"]).withdrawals =
785
+ prepareState.getExpectedWithdrawals().expectedWithdrawals;
786
+ }
784
787
  }
785
788
 
786
789
  if (ForkSeq[fork] >= ForkSeq.deneb) {
@@ -793,7 +796,7 @@ function preparePayloadAttributes(
793
796
  export async function produceCommonBlockBody<T extends BlockType>(
794
797
  this: BeaconChain,
795
798
  blockType: T,
796
- currentState: CachedBeaconStateAllForks,
799
+ currentState: IBeaconStateView,
797
800
  {randaoReveal, graffiti, slot, parentBlock}: BlockAttributes
798
801
  ): Promise<CommonBlockBody> {
799
802
  const stepsMetrics =
@@ -1,6 +1,6 @@
1
1
  import {routes} from "@lodestar/api";
2
2
  import {ProtoBlock} from "@lodestar/fork-choice";
3
- import {CachedBeaconStateAllForks} from "@lodestar/state-transition";
3
+ import {IBeaconStateView} from "@lodestar/state-transition";
4
4
  import {BeaconBlock, Epoch, RootHex, Slot, phase0} from "@lodestar/types";
5
5
  import {CheckpointHexPayload} from "../stateCache/types.js";
6
6
 
@@ -9,8 +9,10 @@ export enum RegenCaller {
9
9
  processBlock = "processBlock",
10
10
  produceBlock = "produceBlock",
11
11
  validateGossipBlock = "validateGossipBlock",
12
+ validateGossipPayloadEnvelope = "validateGossipPayloadEnvelope",
12
13
  validateGossipBlob = "validateGossipBlob",
13
14
  validateGossipDataColumn = "validateGossipDataColumn",
15
+ validateGossipExecutionPayloadEnvelope = "validateGossipExecutionPayloadEnvelope",
14
16
  precomputeEpoch = "precomputeEpoch",
15
17
  predictProposerHead = "predictProposerHead",
16
18
  produceAttestationData = "produceAttestationData",
@@ -36,21 +38,21 @@ export type StateRegenerationOpts = {
36
38
  export interface IStateRegenerator extends IStateRegeneratorInternal {
37
39
  dropCache(): void;
38
40
  dumpCacheSummary(): routes.lodestar.StateCacheItem[];
39
- getStateSync(stateRoot: RootHex): CachedBeaconStateAllForks | null;
40
- getPreStateSync(block: BeaconBlock): CachedBeaconStateAllForks | null;
41
- getCheckpointStateOrBytes(cp: CheckpointHexPayload): Promise<CachedBeaconStateAllForks | Uint8Array | null>;
42
- getCheckpointStateSync(cp: CheckpointHexPayload): CachedBeaconStateAllForks | null;
43
- getClosestHeadState(head: ProtoBlock): CachedBeaconStateAllForks | null;
41
+ getStateSync(stateRoot: RootHex): IBeaconStateView | null;
42
+ getPreStateSync(block: BeaconBlock): IBeaconStateView | null;
43
+ getCheckpointStateOrBytes(cp: CheckpointHexPayload): Promise<IBeaconStateView | Uint8Array | null>;
44
+ getCheckpointStateSync(cp: CheckpointHexPayload): IBeaconStateView | null;
45
+ getClosestHeadState(head: ProtoBlock): IBeaconStateView | null;
44
46
  pruneOnCheckpoint(finalizedEpoch: Epoch, justifiedEpoch: Epoch, headStateRoot: RootHex): void;
45
47
  pruneOnFinalized(finalizedEpoch: Epoch): void;
46
- processBlockState(blockRootHex: RootHex, postState: CachedBeaconStateAllForks): void;
47
- processPayloadState(payloadState: CachedBeaconStateAllForks): void;
48
+ processBlockState(blockRootHex: RootHex, postState: IBeaconStateView): void;
49
+ processPayloadState(payloadState: IBeaconStateView): void;
48
50
  /**
49
51
  * payloadPresent is true if this is payload state, false if block state.
50
52
  * payloadPresent is always true for pre-gloas.
51
53
  */
52
- addCheckpointState(cp: phase0.Checkpoint, item: CachedBeaconStateAllForks, payloadPresent: boolean): void;
53
- updateHeadState(newHead: ProtoBlock, maybeHeadState: CachedBeaconStateAllForks): void;
54
+ addCheckpointState(cp: phase0.Checkpoint, item: IBeaconStateView, payloadPresent: boolean): void;
55
+ updateHeadState(newHead: ProtoBlock, maybeHeadState: IBeaconStateView): void;
54
56
  updatePreComputedCheckpoint(rootHex: RootHex, epoch: Epoch, payloadPresent: boolean): number | null;
55
57
  upgradeForGloas(epoch: Epoch): void;
56
58
  }
@@ -63,11 +65,7 @@ export interface IStateRegeneratorInternal {
63
65
  * Return a valid pre-state for a beacon block
64
66
  * This will always return a state in the latest viable epoch
65
67
  */
66
- getPreState(
67
- block: BeaconBlock,
68
- opts: StateRegenerationOpts,
69
- rCaller: RegenCaller
70
- ): Promise<CachedBeaconStateAllForks>;
68
+ getPreState(block: BeaconBlock, opts: StateRegenerationOpts, rCaller: RegenCaller): Promise<IBeaconStateView>;
71
69
 
72
70
  /**
73
71
  * Return the state of `blockRoot` processed to slot `slot`
@@ -77,10 +75,10 @@ export interface IStateRegeneratorInternal {
77
75
  slot: Slot,
78
76
  opts: StateRegenerationOpts,
79
77
  rCaller: RegenCaller
80
- ): Promise<CachedBeaconStateAllForks>;
78
+ ): Promise<IBeaconStateView>;
81
79
 
82
80
  /**
83
81
  * Return the exact state with `stateRoot`
84
82
  */
85
- getState(stateRoot: RootHex, rCaller: RegenCaller): Promise<CachedBeaconStateAllForks>;
83
+ getState(stateRoot: RootHex, rCaller: RegenCaller): Promise<IBeaconStateView>;
86
84
  }
@@ -1,6 +1,6 @@
1
1
  import {routes} from "@lodestar/api";
2
2
  import {IForkChoice, PayloadStatus, ProtoBlock} from "@lodestar/fork-choice";
3
- import {CachedBeaconStateAllForks, computeEpochAtSlot} from "@lodestar/state-transition";
3
+ import {IBeaconStateView, computeEpochAtSlot} from "@lodestar/state-transition";
4
4
  import {BeaconBlock, Epoch, RootHex, Slot, isGloasBeaconBlock, phase0} from "@lodestar/types";
5
5
  import {Logger, fromHex, toRootHex} from "@lodestar/utils";
6
6
  import {Metrics} from "../../metrics/index.js";
@@ -34,7 +34,7 @@ export type RegenRequest = RegenRequestByKey[RegenRequestKey];
34
34
  * All requests are queued so that only a single state at a time may be regenerated at a time
35
35
  */
36
36
  export class QueuedStateRegenerator implements IStateRegenerator {
37
- readonly jobQueue: JobItemQueue<[RegenRequest], CachedBeaconStateAllForks>;
37
+ readonly jobQueue: JobItemQueue<[RegenRequest], IBeaconStateView>;
38
38
  private readonly regen: StateRegenerator;
39
39
 
40
40
  private readonly forkChoice: IForkChoice;
@@ -45,7 +45,7 @@ export class QueuedStateRegenerator implements IStateRegenerator {
45
45
 
46
46
  constructor(modules: QueuedStateRegeneratorModules) {
47
47
  this.regen = new StateRegenerator(modules);
48
- this.jobQueue = new JobItemQueue<[RegenRequest], CachedBeaconStateAllForks>(
48
+ this.jobQueue = new JobItemQueue<[RegenRequest], IBeaconStateView>(
49
49
  this.jobQueueProcessor,
50
50
  {maxLength: REGEN_QUEUE_MAX_LEN, signal: modules.signal},
51
51
  modules.metrics ? modules.metrics.regenQueue : undefined
@@ -79,14 +79,14 @@ export class QueuedStateRegenerator implements IStateRegenerator {
79
79
  /**
80
80
  * Get a state from block state cache.
81
81
  */
82
- getStateSync(stateRoot: RootHex): CachedBeaconStateAllForks | null {
82
+ getStateSync(stateRoot: RootHex): IBeaconStateView | null {
83
83
  return this.blockStateCache.get(stateRoot);
84
84
  }
85
85
 
86
86
  /**
87
87
  * Get state for block processing.
88
88
  */
89
- getPreStateSync(block: BeaconBlock): CachedBeaconStateAllForks | null {
89
+ getPreStateSync(block: BeaconBlock): IBeaconStateView | null {
90
90
  const parentRoot = toRootHex(block.parentRoot);
91
91
  const parentBlock = isGloasBeaconBlock(block)
92
92
  ? this.forkChoice.getBlockHexAndBlockHash(
@@ -135,21 +135,21 @@ export class QueuedStateRegenerator implements IStateRegenerator {
135
135
  return null;
136
136
  }
137
137
 
138
- async getCheckpointStateOrBytes(cp: CheckpointHexPayload): Promise<CachedBeaconStateAllForks | Uint8Array | null> {
138
+ async getCheckpointStateOrBytes(cp: CheckpointHexPayload): Promise<IBeaconStateView | Uint8Array | null> {
139
139
  return this.checkpointStateCache.getStateOrBytes(cp);
140
140
  }
141
141
 
142
142
  /**
143
143
  * Get checkpoint state from cache
144
144
  */
145
- getCheckpointStateSync(cp: CheckpointHexPayload): CachedBeaconStateAllForks | null {
145
+ getCheckpointStateSync(cp: CheckpointHexPayload): IBeaconStateView | null {
146
146
  return this.checkpointStateCache.get(cp);
147
147
  }
148
148
 
149
149
  /**
150
150
  * Get state closest to head
151
151
  */
152
- getClosestHeadState(head: ProtoBlock): CachedBeaconStateAllForks | null {
152
+ getClosestHeadState(head: ProtoBlock): IBeaconStateView | null {
153
153
  // Convert PayloadStatus to payloadPresent boolean
154
154
  if (head.payloadStatus === PayloadStatus.PENDING) {
155
155
  throw new RegenError({
@@ -175,7 +175,7 @@ export class QueuedStateRegenerator implements IStateRegenerator {
175
175
  this.blockStateCache.deleteAllBeforeEpoch(finalizedEpoch);
176
176
  }
177
177
 
178
- processBlockState(blockRootHex: RootHex, postState: CachedBeaconStateAllForks): void {
178
+ processBlockState(blockRootHex: RootHex, postState: IBeaconStateView): void {
179
179
  this.blockStateCache.add(postState);
180
180
  this.checkpointStateCache.processState(blockRootHex, postState).catch((e) => {
181
181
  this.logger.debug("Error processing block state", {blockRootHex, slot: postState.slot}, e);
@@ -185,17 +185,17 @@ export class QueuedStateRegenerator implements IStateRegenerator {
185
185
  /**
186
186
  * Process payload state for caching after importing execution payload.
187
187
  */
188
- processPayloadState(payloadState: CachedBeaconStateAllForks): void {
188
+ processPayloadState(payloadState: IBeaconStateView): void {
189
189
  // Add payload state to block state cache (keyed by payload state root)
190
190
  this.blockStateCache.add(payloadState);
191
191
  }
192
192
 
193
193
  // TODO GLOAS: This should also be called when importing execution payload after we implement it
194
- addCheckpointState(cp: phase0.Checkpoint, item: CachedBeaconStateAllForks, payloadPresent: boolean): void {
194
+ addCheckpointState(cp: phase0.Checkpoint, item: IBeaconStateView, payloadPresent: boolean): void {
195
195
  this.checkpointStateCache.add(cp, item, payloadPresent);
196
196
  }
197
197
 
198
- updateHeadState(newHead: ProtoBlock, maybeHeadState: CachedBeaconStateAllForks): void {
198
+ updateHeadState(newHead: ProtoBlock, maybeHeadState: IBeaconStateView): void {
199
199
  const {stateRoot: newHeadStateRoot, blockRoot: newHeadBlockRoot, slot: newHeadSlot} = newHead;
200
200
  const maybeHeadStateRoot = toRootHex(maybeHeadState.hashTreeRoot());
201
201
  const logCtx = {
@@ -241,11 +241,7 @@ export class QueuedStateRegenerator implements IStateRegenerator {
241
241
  * Get the state to run with `block`.
242
242
  * - State after `block.parentRoot` dialed forward to block.slot
243
243
  */
244
- async getPreState(
245
- block: BeaconBlock,
246
- opts: StateRegenerationOpts,
247
- rCaller: RegenCaller
248
- ): Promise<CachedBeaconStateAllForks> {
244
+ async getPreState(block: BeaconBlock, opts: StateRegenerationOpts, rCaller: RegenCaller): Promise<IBeaconStateView> {
249
245
  this.metrics?.regenFnCallTotal.inc({caller: rCaller, entrypoint: RegenFnName.getPreState});
250
246
 
251
247
  // First attempt to fetch the state from caches before queueing
@@ -271,14 +267,14 @@ export class QueuedStateRegenerator implements IStateRegenerator {
271
267
  slot: Slot,
272
268
  opts: StateRegenerationOpts,
273
269
  rCaller: RegenCaller
274
- ): Promise<CachedBeaconStateAllForks> {
270
+ ): Promise<IBeaconStateView> {
275
271
  this.metrics?.regenFnCallTotal.inc({caller: rCaller, entrypoint: RegenFnName.getBlockSlotState});
276
272
 
277
273
  // The state is not immediately available in the caches, enqueue the job
278
274
  return this.jobQueue.push({key: "getBlockSlotState", args: [block, slot, opts, rCaller]});
279
275
  }
280
276
 
281
- async getState(stateRoot: RootHex, rCaller: RegenCaller): Promise<CachedBeaconStateAllForks> {
277
+ async getState(stateRoot: RootHex, rCaller: RegenCaller): Promise<IBeaconStateView> {
282
278
  this.metrics?.regenFnCallTotal.inc({caller: rCaller, entrypoint: RegenFnName.getState});
283
279
 
284
280
  // First attempt to fetch the state from cache before queueing
@@ -292,7 +288,7 @@ export class QueuedStateRegenerator implements IStateRegenerator {
292
288
  return this.jobQueue.push({key: "getState", args: [stateRoot, rCaller]});
293
289
  }
294
290
 
295
- private jobQueueProcessor = async (regenRequest: RegenRequest): Promise<CachedBeaconStateAllForks> => {
291
+ private jobQueueProcessor = async (regenRequest: RegenRequest): Promise<IBeaconStateView> => {
296
292
  const metricsLabels = {
297
293
  caller: regenRequest.args.at(-1) as RegenCaller,
298
294
  entrypoint: regenRequest.key as RegenFnName,
@@ -2,14 +2,12 @@ import {ChainForkConfig} from "@lodestar/config";
2
2
  import {IForkChoice, PayloadStatus, ProtoBlock} from "@lodestar/fork-choice";
3
3
  import {ForkSeq, SLOTS_PER_EPOCH} from "@lodestar/params";
4
4
  import {
5
- CachedBeaconStateAllForks,
6
5
  DataAvailabilityStatus,
7
6
  ExecutionPayloadStatus,
7
+ IBeaconStateView,
8
8
  StateHashTreeRootSource,
9
9
  computeEpochAtSlot,
10
10
  computeStartSlotAtEpoch,
11
- processSlots,
12
- stateTransition,
13
11
  } from "@lodestar/state-transition";
14
12
  import {BeaconBlock, RootHex, SignedBeaconBlock, Slot, isGloasBeaconBlock} from "@lodestar/types";
15
13
  import {Logger, fromHex, toRootHex} from "@lodestar/utils";
@@ -57,7 +55,7 @@ export class StateRegenerator implements IStateRegeneratorInternal {
57
55
  block: BeaconBlock,
58
56
  opts: StateRegenerationOpts,
59
57
  regenCaller: RegenCaller
60
- ): Promise<CachedBeaconStateAllForks> {
58
+ ): Promise<IBeaconStateView> {
61
59
  const parentRoot = toRootHex(block.parentRoot);
62
60
  const parentBlock = isGloasBeaconBlock(block)
63
61
  ? this.modules.forkChoice.getBlockHexAndBlockHash(
@@ -99,7 +97,7 @@ export class StateRegenerator implements IStateRegeneratorInternal {
99
97
  opts: StateRegenerationOpts,
100
98
  regenCaller: RegenCaller,
101
99
  allowDiskReload = false
102
- ): Promise<CachedBeaconStateAllForks> {
100
+ ): Promise<IBeaconStateView> {
103
101
  if (slot < block.slot) {
104
102
  throw new RegenError({
105
103
  code: RegenErrorCode.SLOT_BEFORE_BLOCK_SLOT,
@@ -149,7 +147,7 @@ export class StateRegenerator implements IStateRegeneratorInternal {
149
147
  caller: RegenCaller,
150
148
  // internal option, don't want to expose to external caller
151
149
  allowDiskReload = false
152
- ): Promise<CachedBeaconStateAllForks> {
150
+ ): Promise<IBeaconStateView> {
153
151
  // Trivial case, state at stateRoot is already cached
154
152
  const cachedStateCtx = this.modules.blockStateCache.get(stateRoot);
155
153
  if (cachedStateCtx) {
@@ -164,7 +162,7 @@ export class StateRegenerator implements IStateRegeneratorInternal {
164
162
  // blocks to replay, ordered highest to lowest
165
163
  // gets reversed when replayed
166
164
  const blocksToReplay = [block];
167
- let state: CachedBeaconStateAllForks | null = null;
165
+ let state: IBeaconStateView | null = null;
168
166
  const {checkpointStateCache} = this.modules;
169
167
 
170
168
  const getSeedStateTimer = this.modules.metrics?.regenGetState.getSeedState.startTimer({caller});
@@ -260,8 +258,7 @@ export class StateRegenerator implements IStateRegeneratorInternal {
260
258
  // Only advances state trusting block's signture and hashes.
261
259
  // We are only running the state transition to get a specific state's data.
262
260
  // stateTransition() does the clone() inside, transfer cache to make the regen faster
263
- state = stateTransition(
264
- state,
261
+ state = state.stateTransition(
265
262
  block,
266
263
  {
267
264
  // Replay previously imported blocks, assume valid and available
@@ -333,16 +330,17 @@ async function processSlotsByCheckpoint(
333
330
  metrics: Metrics | null;
334
331
  validatorMonitor: ValidatorMonitor | null;
335
332
  emitter: ChainEventEmitter;
333
+ config: ChainForkConfig;
336
334
  logger: Logger;
337
335
  },
338
- preState: CachedBeaconStateAllForks,
336
+ preState: IBeaconStateView,
339
337
  slot: Slot,
340
338
  regenCaller: RegenCaller,
341
339
  opts: StateRegenerationOpts
342
- ): Promise<CachedBeaconStateAllForks> {
340
+ ): Promise<IBeaconStateView> {
343
341
  let postState = await processSlotsToNearestCheckpoint(modules, preState, slot, regenCaller, opts);
344
342
  if (postState.slot < slot) {
345
- postState = processSlots(postState, slot, opts, modules);
343
+ postState = postState.processSlots(slot, opts, modules);
346
344
  }
347
345
  return postState;
348
346
  }
@@ -365,18 +363,19 @@ export async function processSlotsToNearestCheckpoint(
365
363
  metrics: Metrics | null;
366
364
  validatorMonitor: ValidatorMonitor | null;
367
365
  emitter: ChainEventEmitter | null;
366
+ config: ChainForkConfig;
368
367
  logger: Logger | null;
369
368
  },
370
- preState: CachedBeaconStateAllForks,
369
+ preState: IBeaconStateView,
371
370
  slot: Slot,
372
371
  regenCaller: RegenCaller,
373
372
  opts: StateRegenerationOpts
374
- ): Promise<CachedBeaconStateAllForks> {
373
+ ): Promise<IBeaconStateView> {
375
374
  const preSlot = preState.slot;
376
375
  const postSlot = slot;
377
376
  const preEpoch = computeEpochAtSlot(preSlot);
378
377
  let postState = preState;
379
- const {checkpointStateCache, emitter, metrics, logger} = modules;
378
+ const {config, checkpointStateCache, emitter, metrics, logger} = modules;
380
379
  let count = 0;
381
380
 
382
381
  for (
@@ -391,7 +390,7 @@ export async function processSlotsToNearestCheckpoint(
391
390
  caller: regenCaller,
392
391
  });
393
392
  // processSlots calls .clone() before mutating
394
- postState = processSlots(postState, nextEpochSlot, opts, modules);
393
+ postState = postState.processSlots(nextEpochSlot, opts, modules);
395
394
  metrics?.epochTransitionByCaller.inc({caller: regenCaller});
396
395
 
397
396
  // this is usually added when we prepare for next slot or validate gossip block
@@ -403,7 +402,7 @@ export async function processSlotsToNearestCheckpoint(
403
402
  // processSlots() only does epoch transitions, never processes payloads
404
403
  // Pre-Gloas: payloadPresent is always true (execution payload embedded in block)
405
404
  // Post-Gloas: result is a block state (payloadPresent=false)
406
- const isPayloadPresent = checkpointState.config.getForkSeq(checkpointState.slot) < ForkSeq.gloas;
405
+ const isPayloadPresent = config.getForkSeq(checkpointState.slot) < ForkSeq.gloas;
407
406
  checkpointStateCache.add(cp, checkpointState, isPayloadPresent);
408
407
  // consumers should not mutate state ever
409
408
  emitter?.emit(ChainEvent.checkpoint, cp, checkpointState);
@@ -3,5 +3,5 @@ export {SeenBlockProposers} from "./seenBlockProposers.js";
3
3
  export {SeenSyncCommitteeMessages} from "./seenCommittee.js";
4
4
  export {SeenContributionAndProof} from "./seenCommitteeContribution.js";
5
5
  export {SeenExecutionPayloadBids} from "./seenExecutionPayloadBids.js";
6
- export {SeenExecutionPayloadEnvelopes} from "./seenExecutionPayloadEnvelope.js";
7
6
  export {SeenBlockInput} from "./seenGossipBlockInput.js";
7
+ export {PayloadEnvelopeInput, SeenPayloadEnvelopeInput} from "./seenPayloadEnvelopeInput.js";
@@ -149,8 +149,8 @@ export class SeenBlockInput {
149
149
  });
150
150
  }
151
151
 
152
- has(rootHex: RootHex): boolean {
153
- return this.blockInputs.has(rootHex);
152
+ hasBlock(rootHex: RootHex): boolean {
153
+ return this.blockInputs.get(rootHex)?.hasBlock() ?? false;
154
154
  }
155
155
 
156
156
  get(rootHex: RootHex): IBlockInput | undefined {
@@ -180,7 +180,7 @@ export class SeenBlockInput {
180
180
  blockInput = this.blockInputs.get(parentRootHex ?? "");
181
181
  parentRootHex = blockInput?.parentRootHex;
182
182
  }
183
- this.logger?.debug(`BlockInputCache.prune deleted ${deletedCount} cached BlockInputs`);
183
+ this.logger?.debug("BlockInputCache.prune deleted cached BlockInputs", {deletedCount});
184
184
  this.pruneToMaxSize();
185
185
  }
186
186
 
@@ -193,7 +193,7 @@ export class SeenBlockInput {
193
193
  this.evictBlockInput(blockInput);
194
194
  }
195
195
  }
196
- this.logger?.debug(`BlockInputCache.onFinalized deleted ${deletedCount} cached BlockInputs`);
196
+ this.logger?.debug("BlockInputCache.onFinalized deleted cached BlockInputs", {deletedCount});
197
197
  this.pruneToMaxSize();
198
198
  };
199
199