@lodestar/beacon-node 1.41.0 → 1.42.0-dev.2fd27cd2f6

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 (455) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +36 -17
  3. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  4. package/lib/api/impl/beacon/pool/index.js +1 -1
  5. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  6. package/lib/api/impl/beacon/state/index.d.ts.map +1 -1
  7. package/lib/api/impl/beacon/state/index.js +27 -32
  8. package/lib/api/impl/beacon/state/index.js.map +1 -1
  9. package/lib/api/impl/beacon/state/utils.d.ts +6 -6
  10. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
  11. package/lib/api/impl/beacon/state/utils.js +7 -10
  12. package/lib/api/impl/beacon/state/utils.js.map +1 -1
  13. package/lib/api/impl/lodestar/index.d.ts.map +1 -1
  14. package/lib/api/impl/lodestar/index.js +4 -6
  15. package/lib/api/impl/lodestar/index.js.map +1 -1
  16. package/lib/api/impl/proof/index.d.ts.map +1 -1
  17. package/lib/api/impl/proof/index.js +2 -6
  18. package/lib/api/impl/proof/index.js.map +1 -1
  19. package/lib/api/impl/validator/index.d.ts.map +1 -1
  20. package/lib/api/impl/validator/index.js +32 -28
  21. package/lib/api/impl/validator/index.js.map +1 -1
  22. package/lib/api/impl/validator/utils.d.ts +2 -2
  23. package/lib/api/impl/validator/utils.d.ts.map +1 -1
  24. package/lib/api/impl/validator/utils.js +3 -3
  25. package/lib/api/impl/validator/utils.js.map +1 -1
  26. package/lib/chain/archiveStore/archiveStore.d.ts +0 -1
  27. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  28. package/lib/chain/archiveStore/archiveStore.js +0 -9
  29. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  30. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts +2 -6
  31. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +1 -1
  32. package/lib/chain/archiveStore/historicalState/getHistoricalState.js +3 -23
  33. package/lib/chain/archiveStore/historicalState/getHistoricalState.js.map +1 -1
  34. package/lib/chain/archiveStore/historicalState/worker.js +1 -0
  35. package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
  36. package/lib/chain/archiveStore/interface.d.ts +4 -4
  37. package/lib/chain/archiveStore/interface.d.ts.map +1 -1
  38. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts +4 -4
  39. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts.map +1 -1
  40. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js +4 -1
  41. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js.map +1 -1
  42. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -1
  43. package/lib/chain/archiveStore/utils/archiveBlocks.js +38 -0
  44. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  45. package/lib/chain/balancesCache.d.ts +2 -2
  46. package/lib/chain/balancesCache.d.ts.map +1 -1
  47. package/lib/chain/balancesCache.js +4 -4
  48. package/lib/chain/balancesCache.js.map +1 -1
  49. package/lib/chain/blocks/blockInput/types.d.ts +4 -3
  50. package/lib/chain/blocks/blockInput/types.d.ts.map +1 -1
  51. package/lib/chain/blocks/blockInput/types.js +1 -0
  52. package/lib/chain/blocks/blockInput/types.js.map +1 -1
  53. package/lib/chain/blocks/importBlock.d.ts +3 -3
  54. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  55. package/lib/chain/blocks/importBlock.js +38 -18
  56. package/lib/chain/blocks/importBlock.js.map +1 -1
  57. package/lib/chain/blocks/importExecutionPayload.d.ts +48 -0
  58. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -0
  59. package/lib/chain/blocks/importExecutionPayload.js +158 -0
  60. package/lib/chain/blocks/importExecutionPayload.js.map +1 -0
  61. package/lib/chain/blocks/index.js +1 -1
  62. package/lib/chain/blocks/index.js.map +1 -1
  63. package/lib/chain/blocks/payloadEnvelopeInput/index.d.ts +3 -0
  64. package/lib/chain/blocks/payloadEnvelopeInput/index.d.ts.map +1 -0
  65. package/lib/chain/blocks/payloadEnvelopeInput/index.js +3 -0
  66. package/lib/chain/blocks/payloadEnvelopeInput/index.js.map +1 -0
  67. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +80 -0
  68. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -0
  69. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +248 -0
  70. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -0
  71. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +29 -0
  72. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -0
  73. package/lib/chain/blocks/payloadEnvelopeInput/types.js +11 -0
  74. package/lib/chain/blocks/payloadEnvelopeInput/types.js.map +1 -0
  75. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +15 -0
  76. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts.map +1 -0
  77. package/lib/chain/blocks/payloadEnvelopeProcessor.js +46 -0
  78. package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -0
  79. package/lib/chain/blocks/types.d.ts +9 -2
  80. package/lib/chain/blocks/types.d.ts.map +1 -1
  81. package/lib/chain/blocks/types.js.map +1 -1
  82. package/lib/chain/blocks/utils/checkpoint.d.ts +2 -2
  83. package/lib/chain/blocks/utils/checkpoint.d.ts.map +1 -1
  84. package/lib/chain/blocks/utils/checkpoint.js.map +1 -1
  85. package/lib/chain/blocks/verifyBlock.d.ts +2 -2
  86. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  87. package/lib/chain/blocks/verifyBlock.js +4 -4
  88. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  89. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +3 -3
  90. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  91. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +3 -3
  92. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  93. package/lib/chain/blocks/verifyBlocksSignatures.d.ts +2 -2
  94. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  95. package/lib/chain/blocks/verifyBlocksSignatures.js +2 -2
  96. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  97. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts +3 -3
  98. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +1 -1
  99. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js +3 -3
  100. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
  101. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts +12 -0
  102. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts.map +1 -0
  103. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js +40 -0
  104. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js.map +1 -0
  105. package/lib/chain/chain.d.ts +22 -17
  106. package/lib/chain/chain.d.ts.map +1 -1
  107. package/lib/chain/chain.js +90 -48
  108. package/lib/chain/chain.js.map +1 -1
  109. package/lib/chain/emitter.d.ts +2 -2
  110. package/lib/chain/emitter.d.ts.map +1 -1
  111. package/lib/chain/errors/blockError.d.ts +4 -4
  112. package/lib/chain/errors/blockError.d.ts.map +1 -1
  113. package/lib/chain/errors/executionPayloadEnvelope.d.ts +12 -2
  114. package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
  115. package/lib/chain/errors/executionPayloadEnvelope.js +3 -1
  116. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
  117. package/lib/chain/forkChoice/index.d.ts +4 -4
  118. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  119. package/lib/chain/forkChoice/index.js +27 -33
  120. package/lib/chain/forkChoice/index.js.map +1 -1
  121. package/lib/chain/initState.d.ts +2 -2
  122. package/lib/chain/initState.d.ts.map +1 -1
  123. package/lib/chain/initState.js +1 -1
  124. package/lib/chain/initState.js.map +1 -1
  125. package/lib/chain/interface.d.ts +19 -17
  126. package/lib/chain/interface.d.ts.map +1 -1
  127. package/lib/chain/lightClient/index.d.ts +2 -2
  128. package/lib/chain/lightClient/index.d.ts.map +1 -1
  129. package/lib/chain/lightClient/index.js +4 -4
  130. package/lib/chain/lightClient/index.js.map +1 -1
  131. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +6 -6
  132. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  133. package/lib/chain/opPools/aggregatedAttestationPool.js +10 -13
  134. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  135. package/lib/chain/opPools/opPool.d.ts +3 -3
  136. package/lib/chain/opPools/opPool.d.ts.map +1 -1
  137. package/lib/chain/opPools/opPool.js +7 -7
  138. package/lib/chain/opPools/opPool.js.map +1 -1
  139. package/lib/chain/opPools/utils.d.ts +2 -2
  140. package/lib/chain/opPools/utils.d.ts.map +1 -1
  141. package/lib/chain/opPools/utils.js +2 -2
  142. package/lib/chain/opPools/utils.js.map +1 -1
  143. package/lib/chain/prepareNextSlot.d.ts +2 -2
  144. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  145. package/lib/chain/prepareNextSlot.js +9 -5
  146. package/lib/chain/prepareNextSlot.js.map +1 -1
  147. package/lib/chain/produceBlock/computeNewStateRoot.d.ts +4 -4
  148. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
  149. package/lib/chain/produceBlock/computeNewStateRoot.js +8 -4
  150. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  151. package/lib/chain/produceBlock/produceBlockBody.d.ts +5 -5
  152. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  153. package/lib/chain/produceBlock/produceBlockBody.js +13 -17
  154. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  155. package/lib/chain/regen/errors.d.ts +11 -1
  156. package/lib/chain/regen/errors.d.ts.map +1 -1
  157. package/lib/chain/regen/errors.js +2 -0
  158. package/lib/chain/regen/errors.js.map +1 -1
  159. package/lib/chain/regen/interface.d.ts +22 -14
  160. package/lib/chain/regen/interface.d.ts.map +1 -1
  161. package/lib/chain/regen/interface.js +2 -0
  162. package/lib/chain/regen/interface.js.map +1 -1
  163. package/lib/chain/regen/queued.d.ts +20 -15
  164. package/lib/chain/regen/queued.d.ts.map +1 -1
  165. package/lib/chain/regen/queued.js +40 -8
  166. package/lib/chain/regen/queued.js.map +1 -1
  167. package/lib/chain/regen/regen.d.ts +11 -5
  168. package/lib/chain/regen/regen.d.ts.map +1 -1
  169. package/lib/chain/regen/regen.js +38 -11
  170. package/lib/chain/regen/regen.js.map +1 -1
  171. package/lib/chain/seenCache/index.d.ts +1 -1
  172. package/lib/chain/seenCache/index.d.ts.map +1 -1
  173. package/lib/chain/seenCache/index.js +1 -1
  174. package/lib/chain/seenCache/index.js.map +1 -1
  175. package/lib/chain/seenCache/seenGossipBlockInput.js +2 -2
  176. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  177. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +38 -0
  178. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -0
  179. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +76 -0
  180. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -0
  181. package/lib/chain/serializeState.d.ts +2 -2
  182. package/lib/chain/serializeState.d.ts.map +1 -1
  183. package/lib/chain/serializeState.js +1 -1
  184. package/lib/chain/serializeState.js.map +1 -1
  185. package/lib/chain/shufflingCache.d.ts +2 -2
  186. package/lib/chain/shufflingCache.d.ts.map +1 -1
  187. package/lib/chain/shufflingCache.js +3 -4
  188. package/lib/chain/shufflingCache.js.map +1 -1
  189. package/lib/chain/stateCache/datastore/db.d.ts +4 -5
  190. package/lib/chain/stateCache/datastore/db.d.ts.map +1 -1
  191. package/lib/chain/stateCache/datastore/db.js +32 -10
  192. package/lib/chain/stateCache/datastore/db.js.map +1 -1
  193. package/lib/chain/stateCache/datastore/file.d.ts +1 -1
  194. package/lib/chain/stateCache/datastore/file.d.ts.map +1 -1
  195. package/lib/chain/stateCache/datastore/file.js +5 -5
  196. package/lib/chain/stateCache/datastore/file.js.map +1 -1
  197. package/lib/chain/stateCache/datastore/types.d.ts +1 -1
  198. package/lib/chain/stateCache/datastore/types.d.ts.map +1 -1
  199. package/lib/chain/stateCache/fifoBlockStateCache.d.ts +13 -10
  200. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -1
  201. package/lib/chain/stateCache/fifoBlockStateCache.js +8 -3
  202. package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
  203. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +36 -17
  204. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  205. package/lib/chain/stateCache/persistentCheckpointsCache.js +228 -134
  206. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  207. package/lib/chain/stateCache/types.d.ts +23 -16
  208. package/lib/chain/stateCache/types.d.ts.map +1 -1
  209. package/lib/chain/stateCache/types.js.map +1 -1
  210. package/lib/chain/validation/attesterSlashing.js +3 -3
  211. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  212. package/lib/chain/validation/blobSidecar.js +1 -1
  213. package/lib/chain/validation/blobSidecar.js.map +1 -1
  214. package/lib/chain/validation/block.d.ts.map +1 -1
  215. package/lib/chain/validation/block.js +3 -3
  216. package/lib/chain/validation/block.js.map +1 -1
  217. package/lib/chain/validation/blsToExecutionChange.js +2 -2
  218. package/lib/chain/validation/blsToExecutionChange.js.map +1 -1
  219. package/lib/chain/validation/dataColumnSidecar.js +1 -1
  220. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  221. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  222. package/lib/chain/validation/executionPayloadBid.js +4 -4
  223. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  224. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
  225. package/lib/chain/validation/executionPayloadEnvelope.js +29 -19
  226. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  227. package/lib/chain/validation/lightClientFinalityUpdate.js +1 -1
  228. package/lib/chain/validation/lightClientFinalityUpdate.js.map +1 -1
  229. package/lib/chain/validation/lightClientOptimisticUpdate.js +1 -1
  230. package/lib/chain/validation/lightClientOptimisticUpdate.js.map +1 -1
  231. package/lib/chain/validation/payloadAttestationMessage.d.ts.map +1 -1
  232. package/lib/chain/validation/payloadAttestationMessage.js +1 -2
  233. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
  234. package/lib/chain/validation/proposerSlashing.js +1 -1
  235. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  236. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts +2 -2
  237. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -1
  238. package/lib/chain/validation/signatureSets/contributionAndProof.js +1 -1
  239. package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
  240. package/lib/chain/validation/signatureSets/syncCommittee.d.ts +2 -2
  241. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -1
  242. package/lib/chain/validation/signatureSets/syncCommittee.js +1 -1
  243. package/lib/chain/validation/signatureSets/syncCommittee.js.map +1 -1
  244. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts +2 -2
  245. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -1
  246. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js.map +1 -1
  247. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts +2 -2
  248. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -1
  249. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js +1 -1
  250. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js.map +1 -1
  251. package/lib/chain/validation/syncCommittee.d.ts +4 -4
  252. package/lib/chain/validation/syncCommittee.d.ts.map +1 -1
  253. package/lib/chain/validation/syncCommittee.js +13 -12
  254. package/lib/chain/validation/syncCommittee.js.map +1 -1
  255. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
  256. package/lib/chain/validation/syncCommitteeContributionAndProof.js +1 -1
  257. package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
  258. package/lib/chain/validation/voluntaryExit.d.ts.map +1 -1
  259. package/lib/chain/validation/voluntaryExit.js +3 -3
  260. package/lib/chain/validation/voluntaryExit.js.map +1 -1
  261. package/lib/chain/validatorMonitor.d.ts +5 -4
  262. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  263. package/lib/chain/validatorMonitor.js +13 -8
  264. package/lib/chain/validatorMonitor.js.map +1 -1
  265. package/lib/execution/engine/interface.d.ts +2 -2
  266. package/lib/metrics/metrics/lodestar.d.ts +40 -4
  267. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  268. package/lib/metrics/metrics/lodestar.js +93 -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 +4 -2
  274. package/lib/network/interface.d.ts.map +1 -1
  275. package/lib/network/network.d.ts +4 -2
  276. package/lib/network/network.d.ts.map +1 -1
  277. package/lib/network/network.js +11 -5
  278. package/lib/network/network.js.map +1 -1
  279. package/lib/network/processor/extractSlotRootFns.d.ts +1 -1
  280. package/lib/network/processor/extractSlotRootFns.d.ts.map +1 -1
  281. package/lib/network/processor/extractSlotRootFns.js +15 -5
  282. package/lib/network/processor/extractSlotRootFns.js.map +1 -1
  283. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  284. package/lib/network/processor/gossipHandlers.js +39 -9
  285. package/lib/network/processor/gossipHandlers.js.map +1 -1
  286. package/lib/network/processor/index.d.ts +12 -7
  287. package/lib/network/processor/index.d.ts.map +1 -1
  288. package/lib/network/processor/index.js +99 -78
  289. package/lib/network/processor/index.js.map +1 -1
  290. package/lib/network/reqresp/ReqRespBeaconNode.d.ts +1 -1
  291. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -1
  292. package/lib/network/reqresp/ReqRespBeaconNode.js +10 -1
  293. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  294. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts +8 -0
  295. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts.map +1 -0
  296. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js +69 -0
  297. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js.map +1 -0
  298. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.d.ts +6 -0
  299. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.d.ts.map +1 -0
  300. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js +28 -0
  301. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js.map +1 -0
  302. package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
  303. package/lib/network/reqresp/handlers/index.js +11 -1
  304. package/lib/network/reqresp/handlers/index.js.map +1 -1
  305. package/lib/network/reqresp/protocols.d.ts +2 -0
  306. package/lib/network/reqresp/protocols.d.ts.map +1 -1
  307. package/lib/network/reqresp/protocols.js +10 -0
  308. package/lib/network/reqresp/protocols.js.map +1 -1
  309. package/lib/network/reqresp/rateLimit.d.ts.map +1 -1
  310. package/lib/network/reqresp/rateLimit.js +8 -0
  311. package/lib/network/reqresp/rateLimit.js.map +1 -1
  312. package/lib/network/reqresp/score.d.ts.map +1 -1
  313. package/lib/network/reqresp/score.js +2 -0
  314. package/lib/network/reqresp/score.js.map +1 -1
  315. package/lib/network/reqresp/types.d.ts +8 -2
  316. package/lib/network/reqresp/types.d.ts.map +1 -1
  317. package/lib/network/reqresp/types.js +7 -1
  318. package/lib/network/reqresp/types.js.map +1 -1
  319. package/lib/node/nodejs.d.ts +2 -2
  320. package/lib/node/nodejs.d.ts.map +1 -1
  321. package/lib/node/nodejs.js +1 -4
  322. package/lib/node/nodejs.js.map +1 -1
  323. package/lib/node/notifier.d.ts.map +1 -1
  324. package/lib/node/notifier.js +3 -3
  325. package/lib/node/notifier.js.map +1 -1
  326. package/lib/sync/backfill/backfill.d.ts +3 -3
  327. package/lib/sync/backfill/backfill.d.ts.map +1 -1
  328. package/lib/sync/backfill/backfill.js +3 -3
  329. package/lib/sync/backfill/backfill.js.map +1 -1
  330. package/lib/sync/constants.d.ts +1 -1
  331. package/lib/sync/constants.js +1 -1
  332. package/lib/sync/unknownBlock.d.ts +3 -9
  333. package/lib/sync/unknownBlock.d.ts.map +1 -1
  334. package/lib/sync/unknownBlock.js +8 -41
  335. package/lib/sync/unknownBlock.js.map +1 -1
  336. package/lib/util/sszBytes.d.ts +4 -1
  337. package/lib/util/sszBytes.d.ts.map +1 -1
  338. package/lib/util/sszBytes.js +69 -12
  339. package/lib/util/sszBytes.js.map +1 -1
  340. package/lib/util/types.d.ts +2 -0
  341. package/lib/util/types.d.ts.map +1 -1
  342. package/lib/util/types.js +1 -0
  343. package/lib/util/types.js.map +1 -1
  344. package/package.json +15 -15
  345. package/src/api/impl/beacon/blocks/index.ts +37 -18
  346. package/src/api/impl/beacon/pool/index.ts +1 -1
  347. package/src/api/impl/beacon/state/index.ts +29 -41
  348. package/src/api/impl/beacon/state/utils.ts +13 -27
  349. package/src/api/impl/lodestar/index.ts +4 -8
  350. package/src/api/impl/proof/index.ts +2 -9
  351. package/src/api/impl/validator/index.ts +35 -43
  352. package/src/api/impl/validator/utils.ts +4 -7
  353. package/src/chain/archiveStore/archiveStore.ts +0 -10
  354. package/src/chain/archiveStore/historicalState/getHistoricalState.ts +6 -36
  355. package/src/chain/archiveStore/historicalState/worker.ts +1 -0
  356. package/src/chain/archiveStore/interface.ts +4 -4
  357. package/src/chain/archiveStore/strategies/frequencyStateArchiveStrategy.ts +8 -5
  358. package/src/chain/archiveStore/utils/archiveBlocks.ts +59 -1
  359. package/src/chain/balancesCache.ts +5 -11
  360. package/src/chain/blocks/blockInput/types.ts +4 -3
  361. package/src/chain/blocks/importBlock.ts +58 -22
  362. package/src/chain/blocks/importExecutionPayload.ts +236 -0
  363. package/src/chain/blocks/index.ts +1 -1
  364. package/src/chain/blocks/payloadEnvelopeInput/index.ts +2 -0
  365. package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +336 -0
  366. package/src/chain/blocks/payloadEnvelopeInput/types.ts +33 -0
  367. package/src/chain/blocks/payloadEnvelopeProcessor.ts +61 -0
  368. package/src/chain/blocks/types.ts +10 -2
  369. package/src/chain/blocks/utils/checkpoint.ts +2 -2
  370. package/src/chain/blocks/verifyBlock.ts +5 -10
  371. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +5 -10
  372. package/src/chain/blocks/verifyBlocksSignatures.ts +4 -4
  373. package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +6 -8
  374. package/src/chain/blocks/writePayloadEnvelopeInputToDb.ts +55 -0
  375. package/src/chain/chain.ts +134 -81
  376. package/src/chain/emitter.ts +2 -2
  377. package/src/chain/errors/blockError.ts +4 -4
  378. package/src/chain/errors/executionPayloadEnvelope.ts +6 -2
  379. package/src/chain/forkChoice/index.ts +33 -52
  380. package/src/chain/initState.ts +7 -2
  381. package/src/chain/interface.ts +20 -18
  382. package/src/chain/lightClient/index.ts +9 -22
  383. package/src/chain/opPools/aggregatedAttestationPool.ts +15 -21
  384. package/src/chain/opPools/opPool.ts +13 -14
  385. package/src/chain/opPools/utils.ts +4 -4
  386. package/src/chain/prepareNextSlot.ts +12 -10
  387. package/src/chain/produceBlock/computeNewStateRoot.ts +11 -10
  388. package/src/chain/produceBlock/produceBlockBody.ts +23 -50
  389. package/src/chain/regen/errors.ts +6 -1
  390. package/src/chain/regen/interface.ts +22 -18
  391. package/src/chain/regen/queued.ts +59 -27
  392. package/src/chain/regen/regen.ts +52 -23
  393. package/src/chain/seenCache/index.ts +1 -1
  394. package/src/chain/seenCache/seenGossipBlockInput.ts +2 -2
  395. package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +106 -0
  396. package/src/chain/serializeState.ts +3 -3
  397. package/src/chain/shufflingCache.ts +5 -7
  398. package/src/chain/stateCache/datastore/db.ts +33 -10
  399. package/src/chain/stateCache/datastore/file.ts +6 -5
  400. package/src/chain/stateCache/datastore/types.ts +3 -2
  401. package/src/chain/stateCache/fifoBlockStateCache.ts +17 -11
  402. package/src/chain/stateCache/persistentCheckpointsCache.ts +266 -172
  403. package/src/chain/stateCache/types.ts +22 -16
  404. package/src/chain/validation/attesterSlashing.ts +3 -3
  405. package/src/chain/validation/blobSidecar.ts +1 -1
  406. package/src/chain/validation/block.ts +2 -4
  407. package/src/chain/validation/blsToExecutionChange.ts +2 -2
  408. package/src/chain/validation/dataColumnSidecar.ts +1 -1
  409. package/src/chain/validation/executionPayloadBid.ts +3 -7
  410. package/src/chain/validation/executionPayloadEnvelope.ts +36 -29
  411. package/src/chain/validation/lightClientFinalityUpdate.ts +1 -1
  412. package/src/chain/validation/lightClientOptimisticUpdate.ts +1 -1
  413. package/src/chain/validation/payloadAttestationMessage.ts +2 -4
  414. package/src/chain/validation/proposerSlashing.ts +1 -1
  415. package/src/chain/validation/signatureSets/contributionAndProof.ts +2 -7
  416. package/src/chain/validation/signatureSets/syncCommittee.ts +2 -7
  417. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +2 -2
  418. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +2 -7
  419. package/src/chain/validation/syncCommittee.ts +21 -20
  420. package/src/chain/validation/syncCommitteeContributionAndProof.ts +5 -10
  421. package/src/chain/validation/voluntaryExit.ts +3 -7
  422. package/src/chain/validatorMonitor.ts +23 -12
  423. package/src/execution/engine/interface.ts +2 -2
  424. package/src/metrics/metrics/lodestar.ts +100 -19
  425. package/src/network/gossip/encoding.ts +16 -0
  426. package/src/network/interface.ts +15 -2
  427. package/src/network/network.ts +34 -6
  428. package/src/network/processor/extractSlotRootFns.ts +19 -6
  429. package/src/network/processor/gossipHandlers.ts +45 -8
  430. package/src/network/processor/index.ts +110 -89
  431. package/src/network/reqresp/ReqRespBeaconNode.ts +14 -1
  432. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRange.ts +94 -0
  433. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRoot.ts +43 -0
  434. package/src/network/reqresp/handlers/index.ts +12 -0
  435. package/src/network/reqresp/protocols.ts +12 -0
  436. package/src/network/reqresp/rateLimit.ts +18 -0
  437. package/src/network/reqresp/score.ts +2 -0
  438. package/src/network/reqresp/types.ts +13 -0
  439. package/src/node/nodejs.ts +3 -5
  440. package/src/node/notifier.ts +4 -10
  441. package/src/sync/backfill/backfill.ts +4 -4
  442. package/src/sync/constants.ts +1 -1
  443. package/src/sync/unknownBlock.ts +10 -50
  444. package/src/util/sszBytes.ts +90 -10
  445. package/src/util/types.ts +6 -0
  446. package/lib/chain/archiveStore/utils/archivePayloads.d.ts +0 -7
  447. package/lib/chain/archiveStore/utils/archivePayloads.d.ts.map +0 -1
  448. package/lib/chain/archiveStore/utils/archivePayloads.js +0 -10
  449. package/lib/chain/archiveStore/utils/archivePayloads.js.map +0 -1
  450. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.d.ts +0 -15
  451. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.d.ts.map +0 -1
  452. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.js +0 -28
  453. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.js.map +0 -1
  454. package/src/chain/archiveStore/utils/archivePayloads.ts +0 -15
  455. package/src/chain/seenCache/seenExecutionPayloadEnvelope.ts +0 -34
@@ -7,20 +7,35 @@ import {
7
7
  ForkChoiceErrorCode,
8
8
  NotReorgedReason,
9
9
  getSafeExecutionBlockHash,
10
+ isGloasBlock,
10
11
  } from "@lodestar/fork-choice";
11
- import {ForkPostAltair, ForkPostElectra, ForkSeq, MAX_SEED_LOOKAHEAD, SLOTS_PER_EPOCH} from "@lodestar/params";
12
12
  import {
13
- CachedBeaconStateAltair,
14
- EpochCache,
13
+ ForkPostAltair,
14
+ ForkPostElectra,
15
+ ForkPostGloas,
16
+ ForkSeq,
17
+ MAX_SEED_LOOKAHEAD,
18
+ SLOTS_PER_EPOCH,
19
+ } from "@lodestar/params";
20
+ import {
21
+ IBeaconStateView,
15
22
  RootCache,
16
23
  computeEpochAtSlot,
17
24
  computeStartSlotAtEpoch,
18
25
  computeTimeAtSlot,
19
- isExecutionStateType,
20
26
  isStartSlotOfEpoch,
21
- isStateValidatorsNodesPopulated,
22
27
  } from "@lodestar/state-transition";
23
- import {Attestation, BeaconBlock, altair, capella, electra, isGloasBeaconBlock, phase0, ssz} from "@lodestar/types";
28
+ import {
29
+ Attestation,
30
+ BeaconBlock,
31
+ SignedBeaconBlock,
32
+ altair,
33
+ capella,
34
+ electra,
35
+ isGloasBeaconBlock,
36
+ phase0,
37
+ ssz,
38
+ } from "@lodestar/types";
24
39
  import {isErrorAborted, toRootHex} from "@lodestar/utils";
25
40
  import {ZERO_HASH_HEX} from "../../constants/index.js";
26
41
  import {callInNextEventLoop} from "../../util/eventLoop.js";
@@ -30,7 +45,7 @@ import type {BeaconChain} from "../chain.js";
30
45
  import {ChainEvent, ReorgEventData} from "../emitter.js";
31
46
  import {ForkchoiceCaller} from "../forkChoice/index.js";
32
47
  import {REPROCESS_MIN_TIME_TO_NEXT_SLOT_SEC} from "../reprocess.js";
33
- import {toCheckpointHex} from "../stateCache/persistentCheckpointsCache.js";
48
+ import {toCheckpointHexPayload} from "../stateCache/persistentCheckpointsCache.js";
34
49
  import {isBlockInputBlobs, isBlockInputColumns} from "./blockInput/blockInput.js";
35
50
  import {AttestationImportOpt, FullyVerifiedBlock, ImportBlockOpts} from "./types.js";
36
51
  import {getCheckpointFromState} from "./utils/checkpoint.js";
@@ -116,7 +131,28 @@ export async function importBlock(
116
131
 
117
132
  // This adds the state necessary to process the next block
118
133
  // Some block event handlers require state being in state cache so need to do this before emitting EventType.block
119
- this.regen.processState(blockRootHex, postState);
134
+ // Pre-Gloas: blockSummary.payloadStatus is always FULL, payloadPresent = true
135
+ // Post-Gloas: blockSummary.payloadStatus is always PENDING, so payloadPresent = false (block state only, no payload processing yet)
136
+ const payloadPresent = !isGloasBlock(blockSummary);
137
+ // processState manages both block state and payload state variants together for memory/disk management
138
+ this.regen.processBlockState(blockRootHex, postState);
139
+
140
+ // For Gloas blocks, create PayloadEnvelopeInput so it's available for later payload import
141
+ if (fork >= ForkSeq.gloas) {
142
+ this.seenPayloadEnvelopeInputCache.add({
143
+ blockRootHex,
144
+ block: block as SignedBeaconBlock<ForkPostGloas>,
145
+ sampledColumns: this.custodyConfig.sampledColumns,
146
+ custodyColumns: this.custodyConfig.custodyColumns,
147
+ timeCreatedSec: fullyVerifiedBlock.seenTimestampSec,
148
+ });
149
+ this.logger.debug("Created PayloadEnvelopeInput for block", {
150
+ slot: blockSlot,
151
+ root: blockRootHex,
152
+ source: source.source,
153
+ ...(opts.seenTimestampSec !== undefined ? {recvToImport: Date.now() / 1000 - opts.seenTimestampSec} : {}),
154
+ });
155
+ }
120
156
 
121
157
  this.metrics?.importBlock.bySource.inc({source: source.source});
122
158
  this.logger.verbose("Added block to forkchoice and state cache", {slot: blockSlot, root: blockRootHex});
@@ -149,7 +185,7 @@ export async function importBlock(
149
185
  const attDataRoot = toRootHex(ssz.phase0.AttestationData.hashTreeRoot(indexedAttestation.data));
150
186
  addAttestation.call(
151
187
  this,
152
- postState.epochCtx,
188
+ postState,
153
189
  target,
154
190
  attDataRoot,
155
191
  attestation as Attestation<ForkPostElectra>,
@@ -336,7 +372,7 @@ export async function importBlock(
336
372
  try {
337
373
  this.lightClientServer?.onImportBlockHead(
338
374
  block.message as BeaconBlock<ForkPostAltair>,
339
- postState as CachedBeaconStateAltair,
375
+ postState,
340
376
  parentBlockSlot
341
377
  );
342
378
  } catch (e) {
@@ -357,11 +393,11 @@ export async function importBlock(
357
393
  // and the block is weak and can potentially be reorged out.
358
394
  let shouldOverrideFcu = false;
359
395
 
360
- if (blockSlot >= currentSlot && isExecutionStateType(postState)) {
396
+ if (blockSlot >= currentSlot && postState.isExecutionStateType) {
361
397
  let notOverrideFcuReason = NotReorgedReason.Unknown;
362
398
  const proposalSlot = blockSlot + 1;
363
399
  try {
364
- const proposerIndex = postState.epochCtx.getBeaconProposer(proposalSlot);
400
+ const proposerIndex = postState.getBeaconProposer(proposalSlot);
365
401
  const feeRecipient = this.beaconProposerCache.get(proposerIndex);
366
402
 
367
403
  if (feeRecipient) {
@@ -441,7 +477,7 @@ export async function importBlock(
441
477
  }
442
478
  }
443
479
 
444
- if (!isStateValidatorsNodesPopulated(postState)) {
480
+ if (!postState.isStateValidatorsNodesPopulated()) {
445
481
  this.logger.verbose("After importBlock caching postState without SSZ cache", {slot: postState.slot});
446
482
  }
447
483
 
@@ -456,14 +492,14 @@ export async function importBlock(
456
492
  // Cache state to preserve epoch transition work
457
493
  const checkpointState = postState;
458
494
  const cp = getCheckpointFromState(checkpointState);
459
- this.regen.addCheckpointState(cp, checkpointState);
495
+ this.regen.addCheckpointState(cp, checkpointState, payloadPresent);
460
496
  // consumers should not mutate state ever
461
497
  this.emitter.emit(ChainEvent.checkpoint, cp, checkpointState);
462
498
 
463
499
  // Note: in-lined code from previos handler of ChainEvent.checkpoint
464
- this.logger.verbose("Checkpoint processed", toCheckpointHex(cp));
500
+ this.logger.verbose("Checkpoint processed", toCheckpointHexPayload(cp, payloadPresent));
465
501
 
466
- const activeValidatorsCount = checkpointState.epochCtx.currentShuffling.activeIndices.length;
502
+ const activeValidatorsCount = checkpointState.activeValidatorCount;
467
503
  this.metrics?.currentActiveValidators.set(activeValidatorsCount);
468
504
  this.metrics?.currentValidators.set({status: "active"}, activeValidatorsCount);
469
505
 
@@ -479,7 +515,7 @@ export async function importBlock(
479
515
  const justifiedEpoch = justifiedCheckpoint.epoch;
480
516
  const preJustifiedEpoch = parentBlockSummary.justifiedEpoch;
481
517
  if (justifiedEpoch > preJustifiedEpoch) {
482
- this.logger.verbose("Checkpoint justified", toCheckpointHex(justifiedCheckpoint));
518
+ this.logger.verbose("Checkpoint justified", toCheckpointHexPayload(justifiedCheckpoint, payloadPresent));
483
519
  this.metrics?.previousJustifiedEpoch.set(checkpointState.previousJustifiedCheckpoint.epoch);
484
520
  this.metrics?.currentJustifiedEpoch.set(justifiedCheckpoint.epoch);
485
521
  }
@@ -493,7 +529,7 @@ export async function importBlock(
493
529
  state: toRootHex(checkpointState.hashTreeRoot()),
494
530
  executionOptimistic: false,
495
531
  });
496
- this.logger.verbose("Checkpoint finalized", toCheckpointHex(finalizedCheckpoint));
532
+ this.logger.verbose("Checkpoint finalized", toCheckpointHexPayload(finalizedCheckpoint, payloadPresent));
497
533
  this.metrics?.finalizedEpoch.set(finalizedCheckpoint.epoch);
498
534
  }
499
535
  }
@@ -548,7 +584,7 @@ export async function importBlock(
548
584
  this.validatorMonitor?.registerSyncAggregateInBlock(
549
585
  blockEpoch,
550
586
  (block as altair.SignedBeaconBlock).message.body.syncAggregate,
551
- fullyVerifiedBlock.postState.epochCtx.currentSyncCommitteeIndexed.validatorIndices
587
+ fullyVerifiedBlock.postState.currentSyncCommitteeIndexed.validatorIndices
552
588
  );
553
589
  }
554
590
 
@@ -590,7 +626,7 @@ export async function importBlock(
590
626
  export function addAttestationPreElectra(
591
627
  this: BeaconChain,
592
628
  // added to have the same signature as addAttestationPostElectra
593
- _: EpochCache,
629
+ _: IBeaconStateView,
594
630
  target: phase0.Checkpoint,
595
631
  attDataRoot: string,
596
632
  attestation: Attestation,
@@ -607,7 +643,7 @@ export function addAttestationPreElectra(
607
643
 
608
644
  export function addAttestationPostElectra(
609
645
  this: BeaconChain,
610
- epochCtx: EpochCache,
646
+ state: IBeaconStateView,
611
647
  target: phase0.Checkpoint,
612
648
  attDataRoot: string,
613
649
  attestation: Attestation<ForkPostElectra>,
@@ -625,7 +661,7 @@ export function addAttestationPostElectra(
625
661
  } else {
626
662
  const attSlot = attestation.data.slot;
627
663
  const attEpoch = computeEpochAtSlot(attSlot);
628
- const decisionRoot = epochCtx.getShufflingDecisionRoot(attEpoch);
664
+ const decisionRoot = state.getShufflingDecisionRoot(attEpoch);
629
665
  const committees = this.shufflingCache.getBeaconCommittees(attEpoch, decisionRoot, attSlot, committeeIndices);
630
666
  const aggregationBools = attestation.aggregationBits.toBoolArray();
631
667
  let offset = 0;
@@ -0,0 +1,236 @@
1
+ import {routes} from "@lodestar/api";
2
+ import {ForkName} from "@lodestar/params";
3
+ import {getExecutionPayloadEnvelopeSignatureSet} from "@lodestar/state-transition";
4
+ import {byteArrayEquals, fromHex, toRootHex} from "@lodestar/utils";
5
+ import {ExecutionPayloadStatus} from "../../execution/index.js";
6
+ import {isQueueErrorAborted} from "../../util/queue/index.js";
7
+ import {BeaconChain} from "../chain.js";
8
+ import {RegenCaller} from "../regen/interface.js";
9
+ import {PayloadEnvelopeInput} from "../seenCache/seenPayloadEnvelopeInput.js";
10
+ import {ImportPayloadOpts} from "./types.js";
11
+
12
+ const EVENTSTREAM_EMIT_RECENT_EXECUTION_PAYLOAD_SLOTS = 64;
13
+
14
+ export enum PayloadErrorCode {
15
+ EXECUTION_ENGINE_INVALID = "PAYLOAD_ERROR_EXECUTION_ENGINE_INVALID",
16
+ EXECUTION_ENGINE_ERROR = "PAYLOAD_ERROR_EXECUTION_ENGINE_ERROR",
17
+ BLOCK_NOT_IN_FORK_CHOICE = "PAYLOAD_ERROR_BLOCK_NOT_IN_FORK_CHOICE",
18
+ STATE_TRANSITION_ERROR = "PAYLOAD_ERROR_STATE_TRANSITION_ERROR",
19
+ INVALID_SIGNATURE = "PAYLOAD_ERROR_INVALID_SIGNATURE",
20
+ }
21
+
22
+ export type PayloadErrorType =
23
+ | {
24
+ code: PayloadErrorCode.EXECUTION_ENGINE_INVALID;
25
+ execStatus: ExecutionPayloadStatus;
26
+ errorMessage: string;
27
+ }
28
+ | {
29
+ code: PayloadErrorCode.EXECUTION_ENGINE_ERROR;
30
+ execStatus: ExecutionPayloadStatus;
31
+ errorMessage: string;
32
+ }
33
+ | {
34
+ code: PayloadErrorCode.BLOCK_NOT_IN_FORK_CHOICE;
35
+ blockRootHex: string;
36
+ }
37
+ | {
38
+ code: PayloadErrorCode.STATE_TRANSITION_ERROR;
39
+ message: string;
40
+ }
41
+ | {
42
+ code: PayloadErrorCode.INVALID_SIGNATURE;
43
+ };
44
+
45
+ export class PayloadError extends Error {
46
+ type: PayloadErrorType;
47
+
48
+ constructor(type: PayloadErrorType, message?: string) {
49
+ super(message ?? type.code);
50
+ this.type = type;
51
+ }
52
+ }
53
+
54
+ /**
55
+ * Import an execution payload envelope after all data is available.
56
+ *
57
+ * This function:
58
+ * 1. Gets the ProtoBlock from fork choice
59
+ * 2. Applies write-queue backpressure (waitForSpace) early, before verification
60
+ * 3. Regenerates the block state
61
+ * 4. Runs EL verification (notifyNewPayload) in parallel with signature verification and processExecutionPayloadEnvelope
62
+ * 5. Persists verified payload envelope to hot DB
63
+ * 6. Updates fork choice
64
+ * 7. Caches the post-execution payload state
65
+ * 8. Records metrics for column sources
66
+ *
67
+ */
68
+ export async function importExecutionPayload(
69
+ this: BeaconChain,
70
+ payloadInput: PayloadEnvelopeInput,
71
+ opts: ImportPayloadOpts = {}
72
+ ): Promise<void> {
73
+ const envelope = payloadInput.getPayloadEnvelope();
74
+ const blockRootHex = payloadInput.blockRootHex;
75
+
76
+ // 1. Get ProtoBlock for parent root lookup
77
+ const protoBlock = this.forkChoice.getBlockHexDefaultStatus(blockRootHex);
78
+ if (!protoBlock) {
79
+ throw new PayloadError({
80
+ code: PayloadErrorCode.BLOCK_NOT_IN_FORK_CHOICE,
81
+ blockRootHex,
82
+ });
83
+ }
84
+
85
+ // 2. Apply backpressure from the write queue early, before doing verification work.
86
+ // The actual DB write is deferred until after verification succeeds.
87
+ await this.unfinalizedPayloadEnvelopeWrites.waitForSpace();
88
+
89
+ // 3. Get pre-state for processExecutionPayloadEnvelope
90
+ // We need the block state (post-block, pre-payload) to process the envelope
91
+ const blockState = await this.regen.getBlockSlotState(
92
+ protoBlock,
93
+ protoBlock.slot,
94
+ {dontTransferCache: true},
95
+ RegenCaller.processBlock
96
+ );
97
+
98
+ // 4. Run verification steps in parallel
99
+ // Note: No data availability check needed here - importExecutionPayload is only
100
+ // called when payloadInput.isComplete() is true, so all data is already available.
101
+ const [execResult, signatureValid, postPayloadResult] = await Promise.all([
102
+ this.executionEngine.notifyNewPayload(
103
+ ForkName.gloas,
104
+ envelope.message.payload,
105
+ payloadInput.getVersionedHashes(),
106
+ fromHex(protoBlock.parentRoot),
107
+ envelope.message.executionRequests
108
+ ),
109
+
110
+ opts.validSignature === true
111
+ ? Promise.resolve(true)
112
+ : (async () => {
113
+ const signatureSet = getExecutionPayloadEnvelopeSignatureSet(
114
+ this.config,
115
+ this.pubkeyCache,
116
+ blockState,
117
+ envelope,
118
+ payloadInput.proposerIndex
119
+ );
120
+ return this.bls.verifySignatureSets([signatureSet]);
121
+ })(),
122
+
123
+ // Signature verified separately above.
124
+ // State root check is done separately below with better error typing (matching block pipeline pattern).
125
+ (async () => {
126
+ try {
127
+ return {
128
+ postPayloadState: blockState.processExecutionPayloadEnvelope(envelope, {
129
+ verifySignature: false,
130
+ verifyStateRoot: false,
131
+ }),
132
+ };
133
+ } catch (e) {
134
+ throw new PayloadError(
135
+ {
136
+ code: PayloadErrorCode.STATE_TRANSITION_ERROR,
137
+ message: (e as Error).message,
138
+ },
139
+ `State transition error: ${(e as Error).message}`
140
+ );
141
+ }
142
+ })(),
143
+ ]);
144
+
145
+ // 4b. Check signature verification result
146
+ if (!signatureValid) {
147
+ throw new PayloadError({code: PayloadErrorCode.INVALID_SIGNATURE});
148
+ }
149
+
150
+ // 5. Handle EL response
151
+ switch (execResult.status) {
152
+ case ExecutionPayloadStatus.VALID:
153
+ break;
154
+
155
+ case ExecutionPayloadStatus.INVALID:
156
+ throw new PayloadError({
157
+ code: PayloadErrorCode.EXECUTION_ENGINE_INVALID,
158
+ execStatus: execResult.status,
159
+ errorMessage: execResult.validationError ?? "",
160
+ });
161
+
162
+ case ExecutionPayloadStatus.ACCEPTED:
163
+ case ExecutionPayloadStatus.SYNCING:
164
+ // TODO GLOAS: Handle optimistic import for payload - for now treat as error
165
+ throw new PayloadError({
166
+ code: PayloadErrorCode.EXECUTION_ENGINE_ERROR,
167
+ execStatus: execResult.status,
168
+ errorMessage: execResult.validationError ?? "EL syncing, payload not yet validated",
169
+ });
170
+
171
+ case ExecutionPayloadStatus.INVALID_BLOCK_HASH:
172
+ case ExecutionPayloadStatus.ELERROR:
173
+ case ExecutionPayloadStatus.UNAVAILABLE:
174
+ throw new PayloadError({
175
+ code: PayloadErrorCode.EXECUTION_ENGINE_ERROR,
176
+ execStatus: execResult.status,
177
+ errorMessage: execResult.validationError ?? "",
178
+ });
179
+ }
180
+
181
+ // 5b. Verify envelope state root matches post-state
182
+ const postPayloadState = postPayloadResult.postPayloadState;
183
+ const postPayloadStateRoot = postPayloadState.hashTreeRoot();
184
+ if (!byteArrayEquals(envelope.message.stateRoot, postPayloadStateRoot)) {
185
+ throw new PayloadError({
186
+ code: PayloadErrorCode.STATE_TRANSITION_ERROR,
187
+ message: `Envelope state root mismatch expected=${toRootHex(envelope.message.stateRoot)} actual=${toRootHex(postPayloadStateRoot)}`,
188
+ });
189
+ }
190
+
191
+ // 5c. Persist payload envelope to hot DB (performed asynchronously to avoid blocking)
192
+ this.unfinalizedPayloadEnvelopeWrites.push(payloadInput).catch((e) => {
193
+ if (!isQueueErrorAborted(e)) {
194
+ this.logger.error(
195
+ "Error pushing payload envelope to unfinalized write queue",
196
+ {slot: payloadInput.slot, root: blockRootHex},
197
+ e as Error
198
+ );
199
+ }
200
+ });
201
+
202
+ // 6. Update fork choice
203
+ this.forkChoice.onExecutionPayload(
204
+ blockRootHex,
205
+ payloadInput.getBlockHashHex(),
206
+ envelope.message.payload.blockNumber,
207
+ toRootHex(postPayloadStateRoot)
208
+ );
209
+
210
+ // 7. Cache payload state
211
+ // TODO GLOAS: Enable when PR #8868 merged (adds processPayloadState)
212
+ // this.regen.processPayloadState(postPayloadState);
213
+ // if epoch boundary also call
214
+ // this.regen.addCheckpointState(cp, checkpointState, true);
215
+
216
+ // 8. Record metrics for payload envelope and column sources
217
+ this.metrics?.importPayload.bySource.inc({source: payloadInput.getPayloadEnvelopeSource().source});
218
+ for (const {source} of payloadInput.getSampledColumnsWithSource()) {
219
+ this.metrics?.importPayload.columnsBySource.inc({source});
220
+ }
221
+
222
+ this.logger.verbose("Execution payload imported", {
223
+ slot: payloadInput.slot,
224
+ root: blockRootHex,
225
+ blockHash: payloadInput.getBlockHashHex(),
226
+ });
227
+
228
+ // 9. Emit event after payload is fully verified and imported to fork choice, only for recent enough payloads
229
+ const currentSlot = this.clock.currentSlot;
230
+ if (currentSlot - payloadInput.slot < EVENTSTREAM_EMIT_RECENT_EXECUTION_PAYLOAD_SLOTS) {
231
+ this.emitter.emit(routes.events.EventType.executionPayloadAvailable, {
232
+ slot: payloadInput.slot,
233
+ blockRoot: blockRootHex,
234
+ });
235
+ }
236
+ }
@@ -126,7 +126,7 @@ export async function processBlocks(
126
126
  const {state} = err.type;
127
127
  const forkTypes = this.config.getForkTypes(blockSlot);
128
128
  this.persistInvalidSszValue(forkTypes.SignedBeaconBlock, signedBlock, `${blockSlot}_invalid_signature`);
129
- this.persistInvalidSszView(state, `${state.slot}_invalid_signature`);
129
+ this.persistInvalidSszBytes("BeaconState", state.serialize(), `${state.slot}_invalid_signature`);
130
130
  } else if (err.type.code === BlockErrorCode.INVALID_STATE_ROOT) {
131
131
  const {signedBlock} = err;
132
132
  const blockSlot = signedBlock.message.slot;
@@ -0,0 +1,2 @@
1
+ export * from "./payloadEnvelopeInput.js";
2
+ export * from "./types.js";