@lodestar/beacon-node 1.43.0-dev.2740f92909 → 1.43.0-dev.2fba242f5d

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 (387) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +17 -9
  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 +45 -2
  6. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  7. package/lib/api/impl/beacon/state/utils.d.ts +2 -2
  8. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
  9. package/lib/api/impl/beacon/state/utils.js.map +1 -1
  10. package/lib/api/impl/debug/index.d.ts.map +1 -1
  11. package/lib/api/impl/debug/index.js +0 -1
  12. package/lib/api/impl/debug/index.js.map +1 -1
  13. package/lib/api/impl/lodestar/index.js +1 -1
  14. package/lib/api/impl/lodestar/index.js.map +1 -1
  15. package/lib/api/impl/validator/index.d.ts.map +1 -1
  16. package/lib/api/impl/validator/index.js +67 -5
  17. package/lib/api/impl/validator/index.js.map +1 -1
  18. package/lib/chain/GetBlobsTracker.d.ts +1 -1
  19. package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
  20. package/lib/chain/GetBlobsTracker.js +1 -2
  21. package/lib/chain/GetBlobsTracker.js.map +1 -1
  22. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  23. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  24. package/lib/chain/archiveStore/interface.d.ts +4 -4
  25. package/lib/chain/archiveStore/interface.d.ts.map +1 -1
  26. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts +4 -4
  27. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts.map +1 -1
  28. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js +2 -4
  29. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js.map +1 -1
  30. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +2 -2
  31. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -1
  32. package/lib/chain/archiveStore/utils/archiveBlocks.js +110 -58
  33. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  34. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  35. package/lib/chain/blocks/importBlock.js +49 -53
  36. package/lib/chain/blocks/importBlock.js.map +1 -1
  37. package/lib/chain/blocks/importExecutionPayload.d.ts +28 -14
  38. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  39. package/lib/chain/blocks/importExecutionPayload.js +88 -88
  40. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  41. package/lib/chain/blocks/index.d.ts +5 -3
  42. package/lib/chain/blocks/index.d.ts.map +1 -1
  43. package/lib/chain/blocks/index.js +59 -26
  44. package/lib/chain/blocks/index.js.map +1 -1
  45. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +4 -0
  46. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -1
  47. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +25 -1
  48. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -1
  49. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +1 -0
  50. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -1
  51. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +5 -0
  52. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts.map +1 -1
  53. package/lib/chain/blocks/payloadEnvelopeProcessor.js +7 -5
  54. package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -1
  55. package/lib/chain/blocks/types.d.ts +16 -21
  56. package/lib/chain/blocks/types.d.ts.map +1 -1
  57. package/lib/chain/blocks/utils/chainSegment.d.ts +23 -2
  58. package/lib/chain/blocks/utils/chainSegment.d.ts.map +1 -1
  59. package/lib/chain/blocks/utils/chainSegment.js +89 -12
  60. package/lib/chain/blocks/utils/chainSegment.js.map +1 -1
  61. package/lib/chain/blocks/verifyBlock.d.ts +5 -3
  62. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  63. package/lib/chain/blocks/verifyBlock.js +50 -7
  64. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  65. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +0 -4
  66. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  67. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +5 -2
  68. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  69. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts +2 -1
  70. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -1
  71. package/lib/chain/blocks/verifyBlocksSanityChecks.js +25 -5
  72. package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
  73. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts +24 -0
  74. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts.map +1 -0
  75. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js +76 -0
  76. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js.map +1 -0
  77. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts +14 -0
  78. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts.map +1 -0
  79. package/lib/chain/blocks/verifyPayloadsDataAvailability.js +30 -0
  80. package/lib/chain/blocks/verifyPayloadsDataAvailability.js.map +1 -0
  81. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts +1 -1
  82. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts.map +1 -1
  83. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js +2 -11
  84. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js.map +1 -1
  85. package/lib/chain/chain.d.ts +8 -6
  86. package/lib/chain/chain.d.ts.map +1 -1
  87. package/lib/chain/chain.js +38 -43
  88. package/lib/chain/chain.js.map +1 -1
  89. package/lib/chain/emitter.d.ts +16 -15
  90. package/lib/chain/emitter.d.ts.map +1 -1
  91. package/lib/chain/emitter.js +5 -4
  92. package/lib/chain/emitter.js.map +1 -1
  93. package/lib/chain/errors/attestationError.d.ts +8 -1
  94. package/lib/chain/errors/attestationError.d.ts.map +1 -1
  95. package/lib/chain/errors/attestationError.js +4 -0
  96. package/lib/chain/errors/attestationError.js.map +1 -1
  97. package/lib/chain/errors/blockError.d.ts +8 -1
  98. package/lib/chain/errors/blockError.d.ts.map +1 -1
  99. package/lib/chain/errors/blockError.js +2 -0
  100. package/lib/chain/errors/blockError.js.map +1 -1
  101. package/lib/chain/errors/executionPayloadBid.d.ts +5 -0
  102. package/lib/chain/errors/executionPayloadBid.d.ts.map +1 -1
  103. package/lib/chain/errors/executionPayloadBid.js +1 -0
  104. package/lib/chain/errors/executionPayloadBid.js.map +1 -1
  105. package/lib/chain/errors/executionPayloadEnvelope.d.ts +5 -0
  106. package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
  107. package/lib/chain/errors/executionPayloadEnvelope.js +1 -0
  108. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
  109. package/lib/chain/errors/index.d.ts +1 -0
  110. package/lib/chain/errors/index.d.ts.map +1 -1
  111. package/lib/chain/errors/index.js +1 -0
  112. package/lib/chain/errors/index.js.map +1 -1
  113. package/lib/chain/errors/proposerPreferences.d.ts +33 -0
  114. package/lib/chain/errors/proposerPreferences.d.ts.map +1 -0
  115. package/lib/chain/errors/proposerPreferences.js +13 -0
  116. package/lib/chain/errors/proposerPreferences.js.map +1 -0
  117. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  118. package/lib/chain/forkChoice/index.js +11 -15
  119. package/lib/chain/forkChoice/index.js.map +1 -1
  120. package/lib/chain/interface.d.ts +7 -5
  121. package/lib/chain/interface.d.ts.map +1 -1
  122. package/lib/chain/interface.js.map +1 -1
  123. package/lib/chain/opPools/payloadAttestationPool.d.ts +3 -2
  124. package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
  125. package/lib/chain/opPools/payloadAttestationPool.js +26 -4
  126. package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
  127. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  128. package/lib/chain/prepareNextSlot.js +47 -23
  129. package/lib/chain/prepareNextSlot.js.map +1 -1
  130. package/lib/chain/produceBlock/computeNewStateRoot.d.ts +3 -9
  131. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
  132. package/lib/chain/produceBlock/computeNewStateRoot.js +5 -32
  133. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  134. package/lib/chain/produceBlock/produceBlockBody.d.ts +12 -8
  135. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  136. package/lib/chain/produceBlock/produceBlockBody.js +67 -25
  137. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  138. package/lib/chain/regen/errors.d.ts +1 -11
  139. package/lib/chain/regen/errors.d.ts.map +1 -1
  140. package/lib/chain/regen/errors.js +0 -2
  141. package/lib/chain/regen/errors.js.map +1 -1
  142. package/lib/chain/regen/interface.d.ts +7 -12
  143. package/lib/chain/regen/interface.d.ts.map +1 -1
  144. package/lib/chain/regen/interface.js +1 -0
  145. package/lib/chain/regen/interface.js.map +1 -1
  146. package/lib/chain/regen/queued.d.ts +6 -11
  147. package/lib/chain/regen/queued.d.ts.map +1 -1
  148. package/lib/chain/regen/queued.js +9 -44
  149. package/lib/chain/regen/queued.js.map +1 -1
  150. package/lib/chain/regen/regen.d.ts +0 -5
  151. package/lib/chain/regen/regen.d.ts.map +1 -1
  152. package/lib/chain/regen/regen.js +8 -38
  153. package/lib/chain/regen/regen.js.map +1 -1
  154. package/lib/chain/seenCache/index.d.ts +1 -0
  155. package/lib/chain/seenCache/index.d.ts.map +1 -1
  156. package/lib/chain/seenCache/index.js +1 -0
  157. package/lib/chain/seenCache/index.js.map +1 -1
  158. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +19 -6
  159. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -1
  160. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +40 -22
  161. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -1
  162. package/lib/chain/seenCache/seenProposerPreferences.d.ts +15 -0
  163. package/lib/chain/seenCache/seenProposerPreferences.d.ts.map +1 -0
  164. package/lib/chain/seenCache/seenProposerPreferences.js +25 -0
  165. package/lib/chain/seenCache/seenProposerPreferences.js.map +1 -0
  166. package/lib/chain/stateCache/datastore/db.d.ts +5 -4
  167. package/lib/chain/stateCache/datastore/db.d.ts.map +1 -1
  168. package/lib/chain/stateCache/datastore/db.js +10 -32
  169. package/lib/chain/stateCache/datastore/db.js.map +1 -1
  170. package/lib/chain/stateCache/datastore/file.d.ts +1 -1
  171. package/lib/chain/stateCache/datastore/file.d.ts.map +1 -1
  172. package/lib/chain/stateCache/datastore/file.js +5 -5
  173. package/lib/chain/stateCache/datastore/file.js.map +1 -1
  174. package/lib/chain/stateCache/datastore/types.d.ts +1 -1
  175. package/lib/chain/stateCache/datastore/types.d.ts.map +1 -1
  176. package/lib/chain/stateCache/fifoBlockStateCache.d.ts +1 -7
  177. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -1
  178. package/lib/chain/stateCache/fifoBlockStateCache.js +0 -8
  179. package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
  180. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +13 -30
  181. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  182. package/lib/chain/stateCache/persistentCheckpointsCache.js +120 -216
  183. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  184. package/lib/chain/stateCache/types.d.ts +8 -15
  185. package/lib/chain/stateCache/types.d.ts.map +1 -1
  186. package/lib/chain/stateCache/types.js.map +1 -1
  187. package/lib/chain/validation/aggregateAndProof.js +12 -0
  188. package/lib/chain/validation/aggregateAndProof.js.map +1 -1
  189. package/lib/chain/validation/attestation.d.ts.map +1 -1
  190. package/lib/chain/validation/attestation.js +12 -0
  191. package/lib/chain/validation/attestation.js.map +1 -1
  192. package/lib/chain/validation/block.d.ts.map +1 -1
  193. package/lib/chain/validation/block.js +1 -0
  194. package/lib/chain/validation/block.js.map +1 -1
  195. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  196. package/lib/chain/validation/executionPayloadBid.js +13 -1
  197. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  198. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
  199. package/lib/chain/validation/executionPayloadEnvelope.js +21 -11
  200. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  201. package/lib/chain/validation/payloadAttestationMessage.d.ts.map +1 -1
  202. package/lib/chain/validation/payloadAttestationMessage.js +4 -3
  203. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
  204. package/lib/chain/validation/proposerPreferences.d.ts +8 -0
  205. package/lib/chain/validation/proposerPreferences.d.ts.map +1 -0
  206. package/lib/chain/validation/proposerPreferences.js +69 -0
  207. package/lib/chain/validation/proposerPreferences.js.map +1 -0
  208. package/lib/db/repositories/executionPayloadEnvelopeArchive.js +1 -1
  209. package/lib/db/repositories/executionPayloadEnvelopeArchive.js.map +1 -1
  210. package/lib/execution/engine/http.d.ts.map +1 -1
  211. package/lib/execution/engine/http.js +21 -14
  212. package/lib/execution/engine/http.js.map +1 -1
  213. package/lib/execution/engine/interface.d.ts +1 -0
  214. package/lib/execution/engine/interface.d.ts.map +1 -1
  215. package/lib/execution/engine/mock.d.ts.map +1 -1
  216. package/lib/execution/engine/mock.js +6 -0
  217. package/lib/execution/engine/mock.js.map +1 -1
  218. package/lib/execution/engine/types.d.ts +20 -0
  219. package/lib/execution/engine/types.d.ts.map +1 -1
  220. package/lib/execution/engine/types.js +18 -0
  221. package/lib/execution/engine/types.js.map +1 -1
  222. package/lib/metrics/metrics/lodestar.d.ts +1 -0
  223. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  224. package/lib/metrics/metrics/lodestar.js +4 -0
  225. package/lib/metrics/metrics/lodestar.js.map +1 -1
  226. package/lib/network/gossip/interface.d.ts +7 -1
  227. package/lib/network/gossip/interface.d.ts.map +1 -1
  228. package/lib/network/gossip/interface.js +1 -0
  229. package/lib/network/gossip/interface.js.map +1 -1
  230. package/lib/network/gossip/scoringParameters.d.ts.map +1 -1
  231. package/lib/network/gossip/scoringParameters.js +12 -1
  232. package/lib/network/gossip/scoringParameters.js.map +1 -1
  233. package/lib/network/gossip/topic.d.ts +30 -748
  234. package/lib/network/gossip/topic.d.ts.map +1 -1
  235. package/lib/network/gossip/topic.js +6 -0
  236. package/lib/network/gossip/topic.js.map +1 -1
  237. package/lib/network/interface.d.ts +1 -0
  238. package/lib/network/interface.d.ts.map +1 -1
  239. package/lib/network/network.d.ts +1 -0
  240. package/lib/network/network.d.ts.map +1 -1
  241. package/lib/network/network.js +6 -1
  242. package/lib/network/network.js.map +1 -1
  243. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  244. package/lib/network/processor/gossipHandlers.js +46 -22
  245. package/lib/network/processor/gossipHandlers.js.map +1 -1
  246. package/lib/network/processor/gossipQueues/index.d.ts.map +1 -1
  247. package/lib/network/processor/gossipQueues/index.js +5 -0
  248. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  249. package/lib/network/processor/index.d.ts.map +1 -1
  250. package/lib/network/processor/index.js +6 -5
  251. package/lib/network/processor/index.js.map +1 -1
  252. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
  253. package/lib/network/reqresp/handlers/beaconBlocksByRange.js +14 -6
  254. package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
  255. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +1 -1
  256. package/lib/network/reqresp/handlers/blobSidecarsByRange.js +11 -5
  257. package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +1 -1
  258. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -1
  259. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +17 -5
  260. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -1
  261. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts.map +1 -1
  262. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js +7 -4
  263. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js.map +1 -1
  264. package/lib/node/nodejs.d.ts.map +1 -1
  265. package/lib/node/nodejs.js +6 -4
  266. package/lib/node/nodejs.js.map +1 -1
  267. package/lib/sync/range/batch.d.ts +23 -2
  268. package/lib/sync/range/batch.d.ts.map +1 -1
  269. package/lib/sync/range/batch.js +84 -33
  270. package/lib/sync/range/batch.js.map +1 -1
  271. package/lib/sync/range/chain.d.ts +6 -2
  272. package/lib/sync/range/chain.d.ts.map +1 -1
  273. package/lib/sync/range/chain.js +26 -7
  274. package/lib/sync/range/chain.js.map +1 -1
  275. package/lib/sync/range/range.d.ts.map +1 -1
  276. package/lib/sync/range/range.js +17 -6
  277. package/lib/sync/range/range.js.map +1 -1
  278. package/lib/sync/types.d.ts +34 -0
  279. package/lib/sync/types.d.ts.map +1 -1
  280. package/lib/sync/types.js +34 -0
  281. package/lib/sync/types.js.map +1 -1
  282. package/lib/sync/unknownBlock.d.ts +22 -1
  283. package/lib/sync/unknownBlock.d.ts.map +1 -1
  284. package/lib/sync/unknownBlock.js +602 -53
  285. package/lib/sync/unknownBlock.js.map +1 -1
  286. package/lib/sync/utils/downloadByRange.d.ts +46 -10
  287. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  288. package/lib/sync/utils/downloadByRange.js +164 -24
  289. package/lib/sync/utils/downloadByRange.js.map +1 -1
  290. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  291. package/lib/sync/utils/downloadByRoot.js +16 -2
  292. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  293. package/lib/sync/utils/pendingBlocksTree.d.ts +0 -1
  294. package/lib/sync/utils/pendingBlocksTree.d.ts.map +1 -1
  295. package/lib/sync/utils/pendingBlocksTree.js +0 -9
  296. package/lib/sync/utils/pendingBlocksTree.js.map +1 -1
  297. package/lib/util/sszBytes.d.ts.map +1 -1
  298. package/lib/util/sszBytes.js +16 -3
  299. package/lib/util/sszBytes.js.map +1 -1
  300. package/package.json +17 -16
  301. package/src/api/impl/beacon/blocks/index.ts +22 -9
  302. package/src/api/impl/beacon/pool/index.ts +83 -1
  303. package/src/api/impl/beacon/state/utils.ts +2 -2
  304. package/src/api/impl/debug/index.ts +0 -1
  305. package/src/api/impl/lodestar/index.ts +1 -1
  306. package/src/api/impl/validator/index.ts +83 -6
  307. package/src/chain/GetBlobsTracker.ts +1 -2
  308. package/src/chain/archiveStore/archiveStore.ts +5 -5
  309. package/src/chain/archiveStore/interface.ts +4 -4
  310. package/src/chain/archiveStore/strategies/frequencyStateArchiveStrategy.ts +6 -8
  311. package/src/chain/archiveStore/utils/archiveBlocks.ts +153 -94
  312. package/src/chain/blocks/importBlock.ts +50 -77
  313. package/src/chain/blocks/importExecutionPayload.ts +109 -101
  314. package/src/chain/blocks/index.ts +74 -24
  315. package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +33 -1
  316. package/src/chain/blocks/payloadEnvelopeInput/types.ts +1 -0
  317. package/src/chain/blocks/payloadEnvelopeProcessor.ts +7 -6
  318. package/src/chain/blocks/types.ts +16 -26
  319. package/src/chain/blocks/utils/chainSegment.ts +114 -17
  320. package/src/chain/blocks/verifyBlock.ts +70 -9
  321. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +6 -4
  322. package/src/chain/blocks/verifyBlocksSanityChecks.ts +26 -7
  323. package/src/chain/blocks/verifyExecutionPayloadEnvelope.ts +129 -0
  324. package/src/chain/blocks/verifyPayloadsDataAvailability.ts +41 -0
  325. package/src/chain/blocks/writePayloadEnvelopeInputToDb.ts +9 -18
  326. package/src/chain/chain.ts +53 -65
  327. package/src/chain/emitter.ts +15 -14
  328. package/src/chain/errors/attestationError.ts +6 -1
  329. package/src/chain/errors/blockError.ts +4 -1
  330. package/src/chain/errors/executionPayloadBid.ts +6 -0
  331. package/src/chain/errors/executionPayloadEnvelope.ts +6 -0
  332. package/src/chain/errors/index.ts +1 -0
  333. package/src/chain/errors/proposerPreferences.ts +39 -0
  334. package/src/chain/forkChoice/index.ts +8 -20
  335. package/src/chain/interface.ts +11 -3
  336. package/src/chain/opPools/payloadAttestationPool.ts +29 -8
  337. package/src/chain/prepareNextSlot.ts +55 -24
  338. package/src/chain/produceBlock/computeNewStateRoot.ts +6 -43
  339. package/src/chain/produceBlock/produceBlockBody.ts +89 -27
  340. package/src/chain/regen/errors.ts +1 -6
  341. package/src/chain/regen/interface.ts +7 -12
  342. package/src/chain/regen/queued.ts +14 -55
  343. package/src/chain/regen/regen.ts +10 -43
  344. package/src/chain/seenCache/index.ts +1 -0
  345. package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +47 -25
  346. package/src/chain/seenCache/seenProposerPreferences.ts +29 -0
  347. package/src/chain/stateCache/datastore/db.ts +10 -33
  348. package/src/chain/stateCache/datastore/file.ts +5 -6
  349. package/src/chain/stateCache/datastore/types.ts +2 -3
  350. package/src/chain/stateCache/fifoBlockStateCache.ts +1 -10
  351. package/src/chain/stateCache/persistentCheckpointsCache.ts +139 -247
  352. package/src/chain/stateCache/types.ts +8 -14
  353. package/src/chain/validation/aggregateAndProof.ts +13 -0
  354. package/src/chain/validation/attestation.ts +13 -0
  355. package/src/chain/validation/block.ts +1 -0
  356. package/src/chain/validation/executionPayloadBid.ts +14 -0
  357. package/src/chain/validation/executionPayloadEnvelope.ts +22 -12
  358. package/src/chain/validation/payloadAttestationMessage.ts +5 -3
  359. package/src/chain/validation/proposerPreferences.ts +91 -0
  360. package/src/db/repositories/executionPayloadEnvelopeArchive.ts +1 -1
  361. package/src/execution/engine/http.ts +21 -14
  362. package/src/execution/engine/interface.ts +1 -0
  363. package/src/execution/engine/mock.ts +8 -1
  364. package/src/execution/engine/types.ts +41 -0
  365. package/src/metrics/metrics/lodestar.ts +4 -0
  366. package/src/network/gossip/interface.ts +6 -0
  367. package/src/network/gossip/scoringParameters.ts +14 -1
  368. package/src/network/gossip/topic.ts +6 -0
  369. package/src/network/interface.ts +1 -0
  370. package/src/network/network.ts +12 -1
  371. package/src/network/processor/gossipHandlers.ts +61 -27
  372. package/src/network/processor/gossipQueues/index.ts +5 -0
  373. package/src/network/processor/index.ts +6 -5
  374. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +14 -6
  375. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +11 -5
  376. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +17 -5
  377. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRange.ts +7 -4
  378. package/src/node/nodejs.ts +6 -4
  379. package/src/sync/range/batch.ts +142 -38
  380. package/src/sync/range/chain.ts +37 -9
  381. package/src/sync/range/range.ts +18 -6
  382. package/src/sync/types.ts +72 -0
  383. package/src/sync/unknownBlock.ts +760 -57
  384. package/src/sync/utils/downloadByRange.ts +274 -39
  385. package/src/sync/utils/downloadByRoot.ts +24 -2
  386. package/src/sync/utils/pendingBlocksTree.ts +0 -15
  387. package/src/util/sszBytes.ts +21 -3
@@ -19,7 +19,6 @@ import {
19
19
  IBeaconStateView,
20
20
  type IBeaconStateViewBellatrix,
21
21
  computeTimeAtSlot,
22
- isParentBlockFull,
23
22
  isStatePostBellatrix,
24
23
  isStatePostCapella,
25
24
  isStatePostGloas,
@@ -47,8 +46,9 @@ import {
47
46
  electra,
48
47
  fulu,
49
48
  gloas,
49
+ ssz,
50
50
  } from "@lodestar/types";
51
- import {Logger, fromHex, sleep, toHex, toPubkeyHex, toRootHex} from "@lodestar/utils";
51
+ import {Logger, byteArrayEquals, fromHex, sleep, toHex, toPubkeyHex, toRootHex} from "@lodestar/utils";
52
52
  import {ZERO_HASH_HEX} from "../../constants/index.js";
53
53
  import {numToQuantity} from "../../execution/engine/utils.js";
54
54
  import {
@@ -111,12 +111,6 @@ export type ProduceFullGloas = {
111
111
  executionRequests: electra.ExecutionRequests;
112
112
  blobsBundle: BlobsBundle<ForkPostGloas>;
113
113
  cells: fulu.Cell[][];
114
- /**
115
- * Cached payload envelope state root computed during block production.
116
- * This is the state root after running `processExecutionPayloadEnvelope` on the
117
- * post-block state, and later used to construct the `ExecutionPayloadEnvelope`.
118
- */
119
- payloadEnvelopeStateRoot: Root;
120
114
  };
121
115
  export type ProduceFullFulu = {
122
116
  type: BlockType.Full;
@@ -220,14 +214,28 @@ export async function produceBlockBody<T extends BlockType>(
220
214
  });
221
215
 
222
216
  // Get execution payload from EL
217
+ let parentBlockHash: Bytes32;
218
+ let parentExecutionRequests: electra.ExecutionRequests;
219
+ // Apply parent payload once here as it's reused by EL prep and voluntary exit filtering below
220
+ let stateAfterParentPayload: IBeaconStateViewBellatrix = currentState;
221
+ const isExtendingPayload = this.forkChoice.shouldExtendPayload(toRootHex(parentBlockRoot));
222
+ if (isExtendingPayload) {
223
+ parentBlockHash = currentState.latestExecutionPayloadBid.blockHash;
224
+ parentExecutionRequests = await this.getParentExecutionRequests(parentBlock.slot, parentBlock.blockRoot);
225
+ stateAfterParentPayload = currentState.withParentPayloadApplied(parentExecutionRequests);
226
+ } else {
227
+ parentBlockHash = currentState.latestExecutionPayloadBid.parentBlockHash;
228
+ parentExecutionRequests = ssz.electra.ExecutionRequests.defaultValue();
229
+ }
223
230
  const prepareRes = await prepareExecutionPayload(
224
231
  this,
225
232
  this.logger,
226
233
  fork,
227
234
  parentBlockRoot,
235
+ parentBlockHash,
228
236
  safeBlockHash,
229
237
  finalizedBlockHash ?? ZERO_HASH_HEX,
230
- currentState,
238
+ stateAfterParentPayload,
231
239
  feeRecipient
232
240
  );
233
241
 
@@ -261,8 +269,8 @@ export async function produceBlockBody<T extends BlockType>(
261
269
 
262
270
  // Create self-build execution payload bid
263
271
  const bid: gloas.ExecutionPayloadBid = {
264
- parentBlockHash: currentState.latestBlockHash,
265
- parentBlockRoot: parentBlockRoot,
272
+ parentBlockHash,
273
+ parentBlockRoot,
266
274
  blockHash: executionPayload.blockHash,
267
275
  prevRandao: currentState.getRandaoMix(currentState.epoch),
268
276
  feeRecipient: executionPayload.feeRecipient,
@@ -272,6 +280,7 @@ export async function produceBlockBody<T extends BlockType>(
272
280
  value: 0,
273
281
  executionPayment: 0,
274
282
  blobKzgCommitments: blobsBundle.commitments,
283
+ executionRequestsRoot: ssz.electra.ExecutionRequests.hashTreeRoot(executionRequests),
275
284
  };
276
285
  const signedBid: gloas.SignedExecutionPayloadBid = {
277
286
  message: bid,
@@ -281,8 +290,19 @@ export async function produceBlockBody<T extends BlockType>(
281
290
  const commonBlockBody = await commonBlockBodyPromise;
282
291
  const gloasBody = Object.assign({}, commonBlockBody) as gloas.BeaconBlockBody;
283
292
  gloasBody.signedExecutionPayloadBid = signedBid;
284
- // TODO GLOAS: Get payload attestations from pool for previous slot
285
- gloasBody.payloadAttestations = [];
293
+ gloasBody.payloadAttestations = this.payloadAttestationPool.getPayloadAttestationsForBlock(
294
+ parentBlock.blockRoot,
295
+ blockSlot - 1
296
+ );
297
+ gloasBody.parentExecutionRequests = parentExecutionRequests;
298
+ // Drop voluntary exits that parent_execution_requests have invalidated (e.g. a withdrawal
299
+ // request initiating an exit on the same validator). Op pool selected against the unapplied
300
+ // state, so re-validate against the post-apply state to avoid producing an invalid block.
301
+ if (isExtendingPayload && commonBlockBody.voluntaryExits.length > 0) {
302
+ gloasBody.voluntaryExits = commonBlockBody.voluntaryExits.filter((signedVoluntaryExit) =>
303
+ stateAfterParentPayload.isValidVoluntaryExit(signedVoluntaryExit, false)
304
+ );
305
+ }
286
306
  blockBody = gloasBody as AssembledBodyType<T>;
287
307
 
288
308
  // Store execution payload data required to construct execution payload envelope later
@@ -340,6 +360,7 @@ export async function produceBlockBody<T extends BlockType>(
340
360
  this.logger,
341
361
  fork,
342
362
  parentBlockRoot,
363
+ currentState.latestExecutionPayloadHeader.blockHash,
343
364
  safeBlockHash,
344
365
  finalizedBlockHash ?? ZERO_HASH_HEX,
345
366
  currentState,
@@ -448,6 +469,7 @@ export async function produceBlockBody<T extends BlockType>(
448
469
  this.logger,
449
470
  fork,
450
471
  parentBlockRoot,
472
+ currentState.latestExecutionPayloadHeader.blockHash,
451
473
  safeBlockHash,
452
474
  finalizedBlockHash ?? ZERO_HASH_HEX,
453
475
  currentState,
@@ -613,17 +635,21 @@ export async function prepareExecutionPayload(
613
635
  logger: Logger,
614
636
  fork: ForkPostBellatrix,
615
637
  parentBlockRoot: Root,
638
+ parentBlockHash: Bytes32,
616
639
  safeBlockHash: RootHex,
617
640
  finalizedBlockHash: RootHex,
641
+ /**
642
+ * Post-gloas, when extending a full parent, callers must apply
643
+ * parent execution payload first (see `withParentPayloadApplied`).
644
+ */
618
645
  state: IBeaconStateViewBellatrix,
619
646
  suggestedFeeRecipient: string
620
647
  ): Promise<{prepType: PayloadPreparationType; payloadId: PayloadId}> {
621
- const parentHash = state.latestBlockHash;
622
648
  const timestamp = computeTimeAtSlot(chain.config, state.slot, state.genesisTime);
623
649
  const prevRandao = state.getRandaoMix(state.epoch);
624
650
 
625
651
  const payloadIdCached = chain.executionEngine.payloadIdCache.get({
626
- headBlockHash: toRootHex(parentHash),
652
+ headBlockHash: toRootHex(parentBlockHash),
627
653
  finalizedBlockHash,
628
654
  timestamp: numToQuantity(timestamp),
629
655
  prevRandao: toHex(prevRandao),
@@ -652,12 +678,13 @@ export async function prepareExecutionPayload(
652
678
  prepareState: state,
653
679
  prepareSlot: state.slot,
654
680
  parentBlockRoot,
681
+ parentBlockHash,
655
682
  feeRecipient: suggestedFeeRecipient,
656
683
  });
657
684
 
658
685
  payloadId = await chain.executionEngine.notifyForkchoiceUpdate(
659
686
  fork,
660
- toRootHex(parentHash),
687
+ toRootHex(parentBlockHash),
661
688
  safeBlockHash,
662
689
  finalizedBlockHash,
663
690
  attributes
@@ -709,20 +736,34 @@ export function getPayloadAttributesForSSE(
709
736
  prepareState,
710
737
  prepareSlot,
711
738
  parentBlockRoot,
739
+ parentBlockHash,
712
740
  feeRecipient,
713
- }: {prepareState: IBeaconStateViewBellatrix; prepareSlot: Slot; parentBlockRoot: Root; feeRecipient: string}
741
+ }: {
742
+ /**
743
+ * Post-gloas, when extending a full parent, callers must apply
744
+ * parent execution payload first (see `withParentPayloadApplied`).
745
+ */
746
+ prepareState: IBeaconStateViewBellatrix;
747
+ prepareSlot: Slot;
748
+ parentBlockRoot: Root;
749
+ parentBlockHash: Bytes32;
750
+ feeRecipient: string;
751
+ }
714
752
  ): SSEPayloadAttributes {
715
- const parentHash = prepareState.latestBlockHash;
716
753
  const payloadAttributes = preparePayloadAttributes(fork, chain, {
717
754
  prepareState,
718
755
  prepareSlot,
719
756
  parentBlockRoot,
757
+ parentBlockHash,
720
758
  feeRecipient,
721
759
  });
722
760
 
723
761
  let parentBlockNumber: number;
724
762
  if (isForkPostGloas(fork)) {
725
- const parentBlock = chain.forkChoice.getBlockHexAndBlockHash(toRootHex(parentBlockRoot), toRootHex(parentHash));
763
+ const parentBlock = chain.forkChoice.getBlockHexAndBlockHash(
764
+ toRootHex(parentBlockRoot),
765
+ toRootHex(parentBlockHash)
766
+ );
726
767
  if (parentBlock?.executionPayloadBlockHash == null) {
727
768
  throw Error(`Parent block not found in fork choice root=${toRootHex(parentBlockRoot)}`);
728
769
  }
@@ -736,7 +777,7 @@ export function getPayloadAttributesForSSE(
736
777
  proposalSlot: prepareSlot,
737
778
  parentBlockNumber,
738
779
  parentBlockRoot,
739
- parentBlockHash: parentHash,
780
+ parentBlockHash,
740
781
  payloadAttributes,
741
782
  };
742
783
  return ssePayloadAttributes;
@@ -751,11 +792,17 @@ function preparePayloadAttributes(
751
792
  prepareState,
752
793
  prepareSlot,
753
794
  parentBlockRoot,
795
+ parentBlockHash,
754
796
  feeRecipient,
755
797
  }: {
798
+ /**
799
+ * Post-gloas, when extending a full parent, callers must apply
800
+ * parent execution payload first (see `withParentPayloadApplied`).
801
+ */
756
802
  prepareState: IBeaconStateViewBellatrix;
757
803
  prepareSlot: Slot;
758
804
  parentBlockRoot: Root;
805
+ parentBlockHash: Bytes32;
759
806
  feeRecipient: string;
760
807
  }
761
808
  ): SSEPayloadAttributes["payloadAttributes"] {
@@ -772,13 +819,24 @@ function preparePayloadAttributes(
772
819
  throw new Error("Expected Capella state for withdrawals");
773
820
  }
774
821
 
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;
822
+ if (isStatePostGloas(prepareState)) {
823
+ const isExtendingPayload = byteArrayEquals(parentBlockHash, prepareState.latestExecutionPayloadBid.blockHash);
824
+ if (isExtendingPayload) {
825
+ // applyParentExecutionPayload sets latestBlockHash = parentBid.blockHash, so a mismatch
826
+ // here means the caller did not apply parent payload to prepareState
827
+ if (!byteArrayEquals(prepareState.latestBlockHash, prepareState.latestExecutionPayloadBid.blockHash)) {
828
+ throw new Error("Expected state with parent execution payload applied for withdrawals");
829
+ }
830
+ (payloadAttributes as capella.SSEPayloadAttributes["payloadAttributes"]).withdrawals =
831
+ prepareState.getExpectedWithdrawals().expectedWithdrawals;
832
+ } else {
833
+ // When the parent block is empty, state.payloadExpectedWithdrawals holds a batch
834
+ // already deducted from CL balances but never credited on the EL (the envelope
835
+ // was not delivered). The next payload must carry those same withdrawals to
836
+ // restore CL/EL consistency, otherwise validators permanently lose that balance.
837
+ (payloadAttributes as capella.SSEPayloadAttributes["payloadAttributes"]).withdrawals =
838
+ prepareState.payloadExpectedWithdrawals;
839
+ }
782
840
  } else {
783
841
  // withdrawals logic is now fork aware as it changes on electra fork post capella
784
842
  (payloadAttributes as capella.SSEPayloadAttributes["payloadAttributes"]).withdrawals =
@@ -790,6 +848,10 @@ function preparePayloadAttributes(
790
848
  (payloadAttributes as deneb.SSEPayloadAttributes["payloadAttributes"]).parentBeaconBlockRoot = parentBlockRoot;
791
849
  }
792
850
 
851
+ if (ForkSeq[fork] >= ForkSeq.gloas) {
852
+ (payloadAttributes as gloas.SSEPayloadAttributes["payloadAttributes"]).slotNumber = prepareSlot;
853
+ }
854
+
793
855
  return payloadAttributes;
794
856
  }
795
857
 
@@ -1,4 +1,3 @@
1
- import {PayloadStatus} from "@lodestar/fork-choice";
2
1
  import {Root, RootHex, Slot} from "@lodestar/types";
3
2
 
4
3
  export enum RegenErrorCode {
@@ -10,8 +9,6 @@ export enum RegenErrorCode {
10
9
  BLOCK_NOT_IN_DB = "REGEN_ERROR_BLOCK_NOT_IN_DB",
11
10
  STATE_TRANSITION_ERROR = "REGEN_ERROR_STATE_TRANSITION_ERROR",
12
11
  INVALID_STATE_ROOT = "REGEN_ERROR_INVALID_STATE_ROOT",
13
- UNEXPECTED_PAYLOAD_STATUS = "REGEN_ERROR_UNEXPECTED_PAYLOAD_STATUS",
14
- INTERNAL_ERROR = "REGEN_ERROR_INTERNAL_ERROR",
15
12
  }
16
13
 
17
14
  export type RegenErrorType =
@@ -22,9 +19,7 @@ export type RegenErrorType =
22
19
  | {code: RegenErrorCode.TOO_MANY_BLOCK_PROCESSED; stateRoot: RootHex | Root}
23
20
  | {code: RegenErrorCode.BLOCK_NOT_IN_DB; blockRoot: RootHex | Root}
24
21
  | {code: RegenErrorCode.STATE_TRANSITION_ERROR; error: Error}
25
- | {code: RegenErrorCode.INVALID_STATE_ROOT; slot: Slot; expected: RootHex; actual: RootHex}
26
- | {code: RegenErrorCode.UNEXPECTED_PAYLOAD_STATUS; blockRoot: RootHex | Root; payloadStatus: PayloadStatus}
27
- | {code: RegenErrorCode.INTERNAL_ERROR; message: string};
22
+ | {code: RegenErrorCode.INVALID_STATE_ROOT; slot: Slot; expected: RootHex; actual: RootHex};
28
23
 
29
24
  export class RegenError extends Error {
30
25
  type: RegenErrorType;
@@ -2,7 +2,7 @@ import {routes} from "@lodestar/api";
2
2
  import {ProtoBlock} from "@lodestar/fork-choice";
3
3
  import {IBeaconStateView} from "@lodestar/state-transition";
4
4
  import {BeaconBlock, Epoch, RootHex, Slot, phase0} from "@lodestar/types";
5
- import {CheckpointHexPayload} from "../stateCache/types.js";
5
+ import {CheckpointHex} from "../stateCache/types.js";
6
6
 
7
7
  export enum RegenCaller {
8
8
  getDuties = "getDuties",
@@ -21,6 +21,7 @@ export enum RegenCaller {
21
21
  validateGossipAttestation = "validateGossipAttestation",
22
22
  validateGossipVoluntaryExit = "validateGossipVoluntaryExit",
23
23
  validateGossipExecutionPayloadBid = "validateGossipExecutionPayloadBid",
24
+ validateGossipProposerPreferences = "validateGossipProposerPreferences",
24
25
  onForkChoiceFinalized = "onForkChoiceFinalized",
25
26
  restApi = "restApi",
26
27
  }
@@ -40,21 +41,15 @@ export interface IStateRegenerator extends IStateRegeneratorInternal {
40
41
  dumpCacheSummary(): routes.lodestar.StateCacheItem[];
41
42
  getStateSync(stateRoot: RootHex): IBeaconStateView | null;
42
43
  getPreStateSync(block: BeaconBlock): IBeaconStateView | null;
43
- getCheckpointStateOrBytes(cp: CheckpointHexPayload): Promise<IBeaconStateView | Uint8Array | null>;
44
- getCheckpointStateSync(cp: CheckpointHexPayload): IBeaconStateView | null;
44
+ getCheckpointStateOrBytes(cp: CheckpointHex): Promise<IBeaconStateView | Uint8Array | null>;
45
+ getCheckpointStateSync(cp: CheckpointHex): IBeaconStateView | null;
45
46
  getClosestHeadState(head: ProtoBlock): IBeaconStateView | null;
46
47
  pruneOnCheckpoint(finalizedEpoch: Epoch, justifiedEpoch: Epoch, headStateRoot: RootHex): void;
47
48
  pruneOnFinalized(finalizedEpoch: Epoch): void;
48
- processBlockState(blockRootHex: RootHex, postState: IBeaconStateView): void;
49
- processPayloadState(payloadState: IBeaconStateView): void;
50
- /**
51
- * payloadPresent is true if this is payload state, false if block state.
52
- * payloadPresent is always true for pre-gloas.
53
- */
54
- addCheckpointState(cp: phase0.Checkpoint, item: IBeaconStateView, payloadPresent: boolean): void;
49
+ processState(blockRootHex: RootHex, postState: IBeaconStateView): void;
50
+ addCheckpointState(cp: phase0.Checkpoint, item: IBeaconStateView): void;
55
51
  updateHeadState(newHead: ProtoBlock, maybeHeadState: IBeaconStateView): void;
56
- updatePreComputedCheckpoint(rootHex: RootHex, epoch: Epoch, payloadPresent: boolean): number | null;
57
- upgradeForGloas(epoch: Epoch): void;
52
+ updatePreComputedCheckpoint(rootHex: RootHex, epoch: Epoch): number | null;
58
53
  }
59
54
 
60
55
  /**
@@ -1,11 +1,11 @@
1
1
  import {routes} from "@lodestar/api";
2
- import {IForkChoice, PayloadStatus, ProtoBlock} from "@lodestar/fork-choice";
2
+ import {IForkChoice, ProtoBlock} from "@lodestar/fork-choice";
3
3
  import {IBeaconStateView, computeEpochAtSlot} from "@lodestar/state-transition";
4
- import {BeaconBlock, Epoch, RootHex, Slot, isGloasBeaconBlock, phase0} from "@lodestar/types";
5
- import {Logger, fromHex, toRootHex} from "@lodestar/utils";
4
+ import {BeaconBlock, Epoch, RootHex, Slot, phase0} from "@lodestar/types";
5
+ import {Logger, toRootHex} from "@lodestar/utils";
6
6
  import {Metrics} from "../../metrics/index.js";
7
7
  import {JobItemQueue} from "../../util/queue/index.js";
8
- import {BlockStateCache, CheckpointHexPayload, CheckpointStateCache} from "../stateCache/types.js";
8
+ import {BlockStateCache, CheckpointHex, CheckpointStateCache} from "../stateCache/types.js";
9
9
  import {RegenError, RegenErrorCode} from "./errors.js";
10
10
  import {
11
11
  IStateRegenerator,
@@ -88,12 +88,7 @@ export class QueuedStateRegenerator implements IStateRegenerator {
88
88
  */
89
89
  getPreStateSync(block: BeaconBlock): IBeaconStateView | null {
90
90
  const parentRoot = toRootHex(block.parentRoot);
91
- const parentBlock = isGloasBeaconBlock(block)
92
- ? this.forkChoice.getBlockHexAndBlockHash(
93
- parentRoot,
94
- toRootHex(block.body.signedExecutionPayloadBid.message.parentBlockHash)
95
- )
96
- : this.forkChoice.getBlockHexDefaultStatus(parentRoot);
91
+ const parentBlock = this.forkChoice.getBlockHexDefaultStatus(parentRoot);
97
92
  if (!parentBlock) {
98
93
  throw new RegenError({
99
94
  code: RegenErrorCode.BLOCK_NOT_IN_FORKCHOICE,
@@ -104,19 +99,9 @@ export class QueuedStateRegenerator implements IStateRegenerator {
104
99
  const parentEpoch = computeEpochAtSlot(parentBlock.slot);
105
100
  const blockEpoch = computeEpochAtSlot(block.slot);
106
101
 
107
- // Convert PayloadStatus to payloadPresent boolean
108
- if (parentBlock.payloadStatus === PayloadStatus.PENDING) {
109
- throw new RegenError({
110
- code: RegenErrorCode.UNEXPECTED_PAYLOAD_STATUS,
111
- blockRoot: block.parentRoot,
112
- payloadStatus: parentBlock.payloadStatus,
113
- });
114
- }
115
- const payloadPresent = parentBlock.payloadStatus === PayloadStatus.FULL;
116
-
117
102
  // Check the checkpoint cache (if the pre-state is a checkpoint state)
118
103
  if (parentEpoch < blockEpoch) {
119
- const checkpointState = this.checkpointStateCache.getLatest(parentRoot, blockEpoch, payloadPresent);
104
+ const checkpointState = this.checkpointStateCache.getLatest(parentRoot, blockEpoch);
120
105
  if (checkpointState && computeEpochAtSlot(checkpointState.slot) === blockEpoch) {
121
106
  return checkpointState;
122
107
  }
@@ -135,14 +120,14 @@ export class QueuedStateRegenerator implements IStateRegenerator {
135
120
  return null;
136
121
  }
137
122
 
138
- async getCheckpointStateOrBytes(cp: CheckpointHexPayload): Promise<IBeaconStateView | Uint8Array | null> {
123
+ async getCheckpointStateOrBytes(cp: CheckpointHex): Promise<IBeaconStateView | Uint8Array | null> {
139
124
  return this.checkpointStateCache.getStateOrBytes(cp);
140
125
  }
141
126
 
142
127
  /**
143
128
  * Get checkpoint state from cache
144
129
  */
145
- getCheckpointStateSync(cp: CheckpointHexPayload): IBeaconStateView | null {
130
+ getCheckpointStateSync(cp: CheckpointHex): IBeaconStateView | null {
146
131
  return this.checkpointStateCache.get(cp);
147
132
  }
148
133
 
@@ -150,19 +135,7 @@ export class QueuedStateRegenerator implements IStateRegenerator {
150
135
  * Get state closest to head
151
136
  */
152
137
  getClosestHeadState(head: ProtoBlock): IBeaconStateView | null {
153
- // Convert PayloadStatus to payloadPresent boolean
154
- if (head.payloadStatus === PayloadStatus.PENDING) {
155
- throw new RegenError({
156
- code: RegenErrorCode.UNEXPECTED_PAYLOAD_STATUS,
157
- blockRoot: fromHex(head.blockRoot),
158
- payloadStatus: head.payloadStatus,
159
- });
160
- }
161
- const payloadPresent = head.payloadStatus === PayloadStatus.FULL;
162
- return (
163
- this.checkpointStateCache.getLatest(head.blockRoot, Infinity, payloadPresent) ||
164
- this.blockStateCache.get(head.stateRoot)
165
- );
138
+ return this.checkpointStateCache.getLatest(head.blockRoot, Infinity) || this.blockStateCache.get(head.stateRoot);
166
139
  }
167
140
 
168
141
  pruneOnCheckpoint(finalizedEpoch: Epoch, justifiedEpoch: Epoch, headStateRoot: RootHex): void {
@@ -175,24 +148,15 @@ export class QueuedStateRegenerator implements IStateRegenerator {
175
148
  this.blockStateCache.deleteAllBeforeEpoch(finalizedEpoch);
176
149
  }
177
150
 
178
- processBlockState(blockRootHex: RootHex, postState: IBeaconStateView): void {
151
+ processState(blockRootHex: RootHex, postState: IBeaconStateView): void {
179
152
  this.blockStateCache.add(postState);
180
153
  this.checkpointStateCache.processState(blockRootHex, postState).catch((e) => {
181
154
  this.logger.debug("Error processing block state", {blockRootHex, slot: postState.slot}, e);
182
155
  });
183
156
  }
184
157
 
185
- /**
186
- * Process payload state for caching after importing execution payload.
187
- */
188
- processPayloadState(payloadState: IBeaconStateView): void {
189
- // Add payload state to block state cache (keyed by payload state root)
190
- this.blockStateCache.add(payloadState);
191
- }
192
-
193
- // TODO GLOAS: This should also be called when importing execution payload after we implement it
194
- addCheckpointState(cp: phase0.Checkpoint, item: IBeaconStateView, payloadPresent: boolean): void {
195
- this.checkpointStateCache.add(cp, item, payloadPresent);
158
+ addCheckpointState(cp: phase0.Checkpoint, item: IBeaconStateView): void {
159
+ this.checkpointStateCache.add(cp, item);
196
160
  }
197
161
 
198
162
  updateHeadState(newHead: ProtoBlock, maybeHeadState: IBeaconStateView): void {
@@ -228,13 +192,8 @@ export class QueuedStateRegenerator implements IStateRegenerator {
228
192
  }
229
193
  }
230
194
 
231
- updatePreComputedCheckpoint(rootHex: RootHex, epoch: Epoch, payloadPresent: boolean): number | null {
232
- return this.checkpointStateCache.updatePreComputedCheckpoint(rootHex, epoch, payloadPresent);
233
- }
234
-
235
- upgradeForGloas(epoch: Epoch): void {
236
- this.logger.verbose("Upgrading block state cache for Gloas fork", {epoch});
237
- this.blockStateCache.upgradeToGloas();
195
+ updatePreComputedCheckpoint(rootHex: RootHex, epoch: Epoch): number | null {
196
+ return this.checkpointStateCache.updatePreComputedCheckpoint(rootHex, epoch);
238
197
  }
239
198
 
240
199
  /**
@@ -1,6 +1,6 @@
1
1
  import {ChainForkConfig} from "@lodestar/config";
2
- import {IForkChoice, PayloadStatus, ProtoBlock} from "@lodestar/fork-choice";
3
- import {ForkSeq, SLOTS_PER_EPOCH} from "@lodestar/params";
2
+ import {IForkChoice, ProtoBlock} from "@lodestar/fork-choice";
3
+ import {SLOTS_PER_EPOCH} from "@lodestar/params";
4
4
  import {
5
5
  DataAvailabilityStatus,
6
6
  ExecutionPayloadStatus,
@@ -9,7 +9,7 @@ import {
9
9
  computeEpochAtSlot,
10
10
  computeStartSlotAtEpoch,
11
11
  } from "@lodestar/state-transition";
12
- import {BeaconBlock, RootHex, SignedBeaconBlock, Slot, isGloasBeaconBlock} from "@lodestar/types";
12
+ import {BeaconBlock, RootHex, SignedBeaconBlock, Slot} from "@lodestar/types";
13
13
  import {Logger, fromHex, toRootHex} from "@lodestar/utils";
14
14
  import {IBeaconDb} from "../../db/index.js";
15
15
  import {Metrics} from "../../metrics/index.js";
@@ -57,12 +57,7 @@ export class StateRegenerator implements IStateRegeneratorInternal {
57
57
  regenCaller: RegenCaller
58
58
  ): Promise<IBeaconStateView> {
59
59
  const parentRoot = toRootHex(block.parentRoot);
60
- const parentBlock = isGloasBeaconBlock(block)
61
- ? this.modules.forkChoice.getBlockHexAndBlockHash(
62
- parentRoot,
63
- toRootHex(block.body.signedExecutionPayloadBid.message.parentBlockHash)
64
- )
65
- : this.modules.forkChoice.getBlockHexDefaultStatus(parentRoot);
60
+ const parentBlock = this.modules.forkChoice.getBlockHexDefaultStatus(parentRoot);
66
61
  if (!parentBlock) {
67
62
  throw new RegenError({
68
63
  code: RegenErrorCode.BLOCK_NOT_IN_FORKCHOICE,
@@ -110,19 +105,9 @@ export class StateRegenerator implements IStateRegeneratorInternal {
110
105
  const {checkpointStateCache} = this.modules;
111
106
  const epoch = computeEpochAtSlot(slot);
112
107
 
113
- // Convert PayloadStatus to payloadPresent boolean
114
- if (block.payloadStatus === PayloadStatus.PENDING) {
115
- throw new RegenError({
116
- code: RegenErrorCode.UNEXPECTED_PAYLOAD_STATUS,
117
- blockRoot: fromHex(blockRoot),
118
- payloadStatus: block.payloadStatus,
119
- });
120
- }
121
- const payloadPresent = block.payloadStatus === PayloadStatus.FULL;
122
-
123
108
  const latestCheckpointStateCtx = allowDiskReload
124
- ? await checkpointStateCache.getOrReloadLatest(blockRoot, epoch, payloadPresent)
125
- : checkpointStateCache.getLatest(blockRoot, epoch, payloadPresent);
109
+ ? await checkpointStateCache.getOrReloadLatest(blockRoot, epoch)
110
+ : checkpointStateCache.getLatest(blockRoot, epoch);
126
111
 
127
112
  // If a checkpoint state exists with the given checkpoint root, it either is in requested epoch
128
113
  // or needs to have empty slots processed until the requested epoch
@@ -176,18 +161,9 @@ export class StateRegenerator implements IStateRegeneratorInternal {
176
161
  if (!lastBlockToReplay) continue;
177
162
  const epoch = computeEpochAtSlot(lastBlockToReplay.slot - 1);
178
163
 
179
- // Convert PayloadStatus to payloadPresent boolean
180
- if (b.payloadStatus === PayloadStatus.PENDING) {
181
- throw new RegenError({
182
- code: RegenErrorCode.INTERNAL_ERROR,
183
- message: `Unexpected PENDING payloadStatus for ancestor block ${b.blockRoot} at slot ${b.slot}`,
184
- });
185
- }
186
- const payloadPresent = b.payloadStatus === PayloadStatus.FULL;
187
-
188
164
  state = allowDiskReload
189
- ? await checkpointStateCache.getOrReloadLatest(b.blockRoot, epoch, payloadPresent)
190
- : checkpointStateCache.getLatest(b.blockRoot, epoch, payloadPresent);
165
+ ? await checkpointStateCache.getOrReloadLatest(b.blockRoot, epoch)
166
+ : checkpointStateCache.getLatest(b.blockRoot, epoch);
191
167
  if (state) {
192
168
  break;
193
169
  }
@@ -351,11 +327,6 @@ async function processSlotsByCheckpoint(
351
327
  * emitting "checkpoint" events after every epoch processed.
352
328
  *
353
329
  * Stops processing after no more full epochs can be processed.
354
- *
355
- * Output state variant:
356
- * - Post-Gloas: If slots are processed, returns block state (payloadPresent=false).
357
- * If no slots processed, returns preState as-is (preserves variant).
358
- * - Pre-Gloas: Always payloadPresent=true (no block/payload distinction).
359
330
  */
360
331
  export async function processSlotsToNearestCheckpoint(
361
332
  modules: {
@@ -375,7 +346,7 @@ export async function processSlotsToNearestCheckpoint(
375
346
  const postSlot = slot;
376
347
  const preEpoch = computeEpochAtSlot(preSlot);
377
348
  let postState = preState;
378
- const {config, checkpointStateCache, emitter, metrics, logger} = modules;
349
+ const {checkpointStateCache, emitter, metrics, logger} = modules;
379
350
  let count = 0;
380
351
 
381
352
  for (
@@ -399,11 +370,7 @@ export async function processSlotsToNearestCheckpoint(
399
370
  // This may becomes the "official" checkpoint state if the 1st block of epoch is skipped
400
371
  const checkpointState = postState;
401
372
  const cp = getCheckpointFromState(checkpointState);
402
- // processSlots() only does epoch transitions, never processes payloads
403
- // Pre-Gloas: payloadPresent is always true (execution payload embedded in block)
404
- // Post-Gloas: result is a block state (payloadPresent=false)
405
- const isPayloadPresent = config.getForkSeq(checkpointState.slot) < ForkSeq.gloas;
406
- checkpointStateCache.add(cp, checkpointState, isPayloadPresent);
373
+ checkpointStateCache.add(cp, checkpointState);
407
374
  // consumers should not mutate state ever
408
375
  emitter?.emit(ChainEvent.checkpoint, cp, checkpointState);
409
376
 
@@ -5,3 +5,4 @@ export {SeenContributionAndProof} from "./seenCommitteeContribution.js";
5
5
  export {SeenExecutionPayloadBids} from "./seenExecutionPayloadBids.js";
6
6
  export {SeenBlockInput} from "./seenGossipBlockInput.js";
7
7
  export {PayloadEnvelopeInput, SeenPayloadEnvelopeInput} from "./seenPayloadEnvelopeInput.js";
8
+ export {SeenProposerPreferences} from "./seenProposerPreferences.js";