@lodestar/beacon-node 1.42.0-rc.0 → 1.43.0-dev.05a33e512f

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 (462) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +37 -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 +49 -2
  6. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  7. package/lib/api/impl/beacon/state/index.d.ts.map +1 -1
  8. package/lib/api/impl/beacon/state/index.js +13 -10
  9. package/lib/api/impl/beacon/state/index.js.map +1 -1
  10. package/lib/api/impl/beacon/state/utils.d.ts +2 -2
  11. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
  12. package/lib/api/impl/beacon/state/utils.js.map +1 -1
  13. package/lib/api/impl/debug/index.d.ts.map +1 -1
  14. package/lib/api/impl/debug/index.js +0 -1
  15. package/lib/api/impl/debug/index.js.map +1 -1
  16. package/lib/api/impl/lodestar/attesterSlashing.d.ts +8 -0
  17. package/lib/api/impl/lodestar/attesterSlashing.d.ts.map +1 -0
  18. package/lib/api/impl/lodestar/attesterSlashing.js +29 -0
  19. package/lib/api/impl/lodestar/attesterSlashing.js.map +1 -0
  20. package/lib/api/impl/lodestar/index.d.ts.map +1 -1
  21. package/lib/api/impl/lodestar/index.js +40 -1
  22. package/lib/api/impl/lodestar/index.js.map +1 -1
  23. package/lib/api/impl/validator/index.d.ts.map +1 -1
  24. package/lib/api/impl/validator/index.js +74 -5
  25. package/lib/api/impl/validator/index.js.map +1 -1
  26. package/lib/chain/GetBlobsTracker.d.ts +1 -1
  27. package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
  28. package/lib/chain/GetBlobsTracker.js +1 -2
  29. package/lib/chain/GetBlobsTracker.js.map +1 -1
  30. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  31. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  32. package/lib/chain/archiveStore/interface.d.ts +4 -4
  33. package/lib/chain/archiveStore/interface.d.ts.map +1 -1
  34. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts +4 -4
  35. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts.map +1 -1
  36. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js +2 -4
  37. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js.map +1 -1
  38. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +2 -2
  39. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -1
  40. package/lib/chain/archiveStore/utils/archiveBlocks.js +110 -58
  41. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  42. package/lib/chain/blocks/blockInput/blockInput.d.ts +3 -0
  43. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
  44. package/lib/chain/blocks/blockInput/blockInput.js +4 -1
  45. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  46. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  47. package/lib/chain/blocks/importBlock.js +40 -58
  48. package/lib/chain/blocks/importBlock.js.map +1 -1
  49. package/lib/chain/blocks/importExecutionPayload.d.ts +32 -14
  50. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  51. package/lib/chain/blocks/importExecutionPayload.js +107 -87
  52. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  53. package/lib/chain/blocks/index.d.ts +5 -3
  54. package/lib/chain/blocks/index.d.ts.map +1 -1
  55. package/lib/chain/blocks/index.js +58 -26
  56. package/lib/chain/blocks/index.js.map +1 -1
  57. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +15 -1
  58. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -1
  59. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +48 -2
  60. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -1
  61. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +17 -0
  62. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -1
  63. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +5 -0
  64. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts.map +1 -1
  65. package/lib/chain/blocks/payloadEnvelopeProcessor.js +7 -5
  66. package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -1
  67. package/lib/chain/blocks/types.d.ts +16 -21
  68. package/lib/chain/blocks/types.d.ts.map +1 -1
  69. package/lib/chain/blocks/utils/chainSegment.d.ts +23 -2
  70. package/lib/chain/blocks/utils/chainSegment.d.ts.map +1 -1
  71. package/lib/chain/blocks/utils/chainSegment.js +89 -12
  72. package/lib/chain/blocks/utils/chainSegment.js.map +1 -1
  73. package/lib/chain/blocks/verifyBlock.d.ts +5 -3
  74. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  75. package/lib/chain/blocks/verifyBlock.js +50 -7
  76. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  77. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +0 -4
  78. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  79. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +8 -4
  80. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  81. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts +2 -1
  82. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -1
  83. package/lib/chain/blocks/verifyBlocksSanityChecks.js +25 -5
  84. package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
  85. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  86. package/lib/chain/blocks/verifyBlocksSignatures.js +4 -2
  87. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  88. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts +24 -0
  89. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts.map +1 -0
  90. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js +80 -0
  91. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js.map +1 -0
  92. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts +14 -0
  93. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts.map +1 -0
  94. package/lib/chain/blocks/verifyPayloadsDataAvailability.js +30 -0
  95. package/lib/chain/blocks/verifyPayloadsDataAvailability.js.map +1 -0
  96. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts +1 -1
  97. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts.map +1 -1
  98. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js +2 -11
  99. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js.map +1 -1
  100. package/lib/chain/chain.d.ts +9 -6
  101. package/lib/chain/chain.d.ts.map +1 -1
  102. package/lib/chain/chain.js +73 -49
  103. package/lib/chain/chain.js.map +1 -1
  104. package/lib/chain/emitter.d.ts +16 -15
  105. package/lib/chain/emitter.d.ts.map +1 -1
  106. package/lib/chain/emitter.js +5 -4
  107. package/lib/chain/emitter.js.map +1 -1
  108. package/lib/chain/errors/attestationError.d.ts +8 -1
  109. package/lib/chain/errors/attestationError.d.ts.map +1 -1
  110. package/lib/chain/errors/attestationError.js +4 -0
  111. package/lib/chain/errors/attestationError.js.map +1 -1
  112. package/lib/chain/errors/blockError.d.ts +18 -1
  113. package/lib/chain/errors/blockError.d.ts.map +1 -1
  114. package/lib/chain/errors/blockError.js +6 -0
  115. package/lib/chain/errors/blockError.js.map +1 -1
  116. package/lib/chain/errors/executionPayloadBid.d.ts +5 -0
  117. package/lib/chain/errors/executionPayloadBid.d.ts.map +1 -1
  118. package/lib/chain/errors/executionPayloadBid.js +1 -0
  119. package/lib/chain/errors/executionPayloadBid.js.map +1 -1
  120. package/lib/chain/errors/executionPayloadEnvelope.d.ts +5 -0
  121. package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
  122. package/lib/chain/errors/executionPayloadEnvelope.js +1 -0
  123. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
  124. package/lib/chain/errors/index.d.ts +1 -0
  125. package/lib/chain/errors/index.d.ts.map +1 -1
  126. package/lib/chain/errors/index.js +1 -0
  127. package/lib/chain/errors/index.js.map +1 -1
  128. package/lib/chain/errors/proposerPreferences.d.ts +40 -0
  129. package/lib/chain/errors/proposerPreferences.d.ts.map +1 -0
  130. package/lib/chain/errors/proposerPreferences.js +14 -0
  131. package/lib/chain/errors/proposerPreferences.js.map +1 -0
  132. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  133. package/lib/chain/forkChoice/index.js +21 -23
  134. package/lib/chain/forkChoice/index.js.map +1 -1
  135. package/lib/chain/initState.d.ts.map +1 -1
  136. package/lib/chain/initState.js +6 -1
  137. package/lib/chain/initState.js.map +1 -1
  138. package/lib/chain/interface.d.ts +8 -5
  139. package/lib/chain/interface.d.ts.map +1 -1
  140. package/lib/chain/interface.js.map +1 -1
  141. package/lib/chain/lightClient/index.d.ts +2 -2
  142. package/lib/chain/lightClient/index.d.ts.map +1 -1
  143. package/lib/chain/lightClient/index.js +7 -0
  144. package/lib/chain/lightClient/index.js.map +1 -1
  145. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  146. package/lib/chain/opPools/aggregatedAttestationPool.js +5 -2
  147. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  148. package/lib/chain/opPools/executionPayloadBidPool.d.ts +2 -2
  149. package/lib/chain/opPools/executionPayloadBidPool.d.ts.map +1 -1
  150. package/lib/chain/opPools/executionPayloadBidPool.js +2 -2
  151. package/lib/chain/opPools/executionPayloadBidPool.js.map +1 -1
  152. package/lib/chain/opPools/payloadAttestationPool.d.ts +3 -2
  153. package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
  154. package/lib/chain/opPools/payloadAttestationPool.js +26 -4
  155. package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
  156. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  157. package/lib/chain/prepareNextSlot.js +48 -18
  158. package/lib/chain/prepareNextSlot.js.map +1 -1
  159. package/lib/chain/produceBlock/computeNewStateRoot.d.ts +1 -7
  160. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
  161. package/lib/chain/produceBlock/computeNewStateRoot.js +1 -28
  162. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  163. package/lib/chain/produceBlock/produceBlockBody.d.ts +15 -10
  164. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  165. package/lib/chain/produceBlock/produceBlockBody.js +83 -21
  166. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  167. package/lib/chain/regen/errors.d.ts +1 -11
  168. package/lib/chain/regen/errors.d.ts.map +1 -1
  169. package/lib/chain/regen/errors.js +0 -2
  170. package/lib/chain/regen/errors.js.map +1 -1
  171. package/lib/chain/regen/interface.d.ts +7 -12
  172. package/lib/chain/regen/interface.d.ts.map +1 -1
  173. package/lib/chain/regen/interface.js +1 -0
  174. package/lib/chain/regen/interface.js.map +1 -1
  175. package/lib/chain/regen/queued.d.ts +6 -11
  176. package/lib/chain/regen/queued.d.ts.map +1 -1
  177. package/lib/chain/regen/queued.js +9 -44
  178. package/lib/chain/regen/queued.js.map +1 -1
  179. package/lib/chain/regen/regen.d.ts +0 -5
  180. package/lib/chain/regen/regen.d.ts.map +1 -1
  181. package/lib/chain/regen/regen.js +8 -38
  182. package/lib/chain/regen/regen.js.map +1 -1
  183. package/lib/chain/seenCache/index.d.ts +1 -0
  184. package/lib/chain/seenCache/index.d.ts.map +1 -1
  185. package/lib/chain/seenCache/index.js +1 -0
  186. package/lib/chain/seenCache/index.js.map +1 -1
  187. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +24 -7
  188. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -1
  189. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +69 -17
  190. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -1
  191. package/lib/chain/seenCache/seenProposerPreferences.d.ts +16 -0
  192. package/lib/chain/seenCache/seenProposerPreferences.d.ts.map +1 -0
  193. package/lib/chain/seenCache/seenProposerPreferences.js +26 -0
  194. package/lib/chain/seenCache/seenProposerPreferences.js.map +1 -0
  195. package/lib/chain/stateCache/datastore/db.d.ts +5 -4
  196. package/lib/chain/stateCache/datastore/db.d.ts.map +1 -1
  197. package/lib/chain/stateCache/datastore/db.js +10 -32
  198. package/lib/chain/stateCache/datastore/db.js.map +1 -1
  199. package/lib/chain/stateCache/datastore/file.d.ts +1 -1
  200. package/lib/chain/stateCache/datastore/file.d.ts.map +1 -1
  201. package/lib/chain/stateCache/datastore/file.js +5 -5
  202. package/lib/chain/stateCache/datastore/file.js.map +1 -1
  203. package/lib/chain/stateCache/datastore/types.d.ts +1 -1
  204. package/lib/chain/stateCache/datastore/types.d.ts.map +1 -1
  205. package/lib/chain/stateCache/fifoBlockStateCache.d.ts +1 -7
  206. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -1
  207. package/lib/chain/stateCache/fifoBlockStateCache.js +0 -8
  208. package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
  209. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +13 -30
  210. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  211. package/lib/chain/stateCache/persistentCheckpointsCache.js +120 -216
  212. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  213. package/lib/chain/stateCache/types.d.ts +8 -15
  214. package/lib/chain/stateCache/types.d.ts.map +1 -1
  215. package/lib/chain/stateCache/types.js.map +1 -1
  216. package/lib/chain/validation/aggregateAndProof.js +12 -0
  217. package/lib/chain/validation/aggregateAndProof.js.map +1 -1
  218. package/lib/chain/validation/attestation.d.ts.map +1 -1
  219. package/lib/chain/validation/attestation.js +12 -0
  220. package/lib/chain/validation/attestation.js.map +1 -1
  221. package/lib/chain/validation/block.d.ts.map +1 -1
  222. package/lib/chain/validation/block.js +28 -5
  223. package/lib/chain/validation/block.js.map +1 -1
  224. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  225. package/lib/chain/validation/executionPayloadBid.js +30 -12
  226. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  227. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
  228. package/lib/chain/validation/executionPayloadEnvelope.js +27 -12
  229. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  230. package/lib/chain/validation/payloadAttestationMessage.d.ts.map +1 -1
  231. package/lib/chain/validation/payloadAttestationMessage.js +8 -4
  232. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
  233. package/lib/chain/validation/proposerPreferences.d.ts +8 -0
  234. package/lib/chain/validation/proposerPreferences.d.ts.map +1 -0
  235. package/lib/chain/validation/proposerPreferences.js +91 -0
  236. package/lib/chain/validation/proposerPreferences.js.map +1 -0
  237. package/lib/chain/validation/syncCommittee.d.ts.map +1 -1
  238. package/lib/chain/validation/syncCommittee.js +4 -0
  239. package/lib/chain/validation/syncCommittee.js.map +1 -1
  240. package/lib/chain/validation/syncCommitteeContributionAndProof.js +4 -1
  241. package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
  242. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  243. package/lib/chain/validatorMonitor.js +3 -3
  244. package/lib/chain/validatorMonitor.js.map +1 -1
  245. package/lib/db/repositories/executionPayloadEnvelopeArchive.js +1 -1
  246. package/lib/db/repositories/executionPayloadEnvelopeArchive.js.map +1 -1
  247. package/lib/execution/engine/http.d.ts.map +1 -1
  248. package/lib/execution/engine/http.js +21 -14
  249. package/lib/execution/engine/http.js.map +1 -1
  250. package/lib/execution/engine/interface.d.ts +1 -0
  251. package/lib/execution/engine/interface.d.ts.map +1 -1
  252. package/lib/execution/engine/mock.d.ts.map +1 -1
  253. package/lib/execution/engine/mock.js +6 -0
  254. package/lib/execution/engine/mock.js.map +1 -1
  255. package/lib/execution/engine/types.d.ts +20 -0
  256. package/lib/execution/engine/types.d.ts.map +1 -1
  257. package/lib/execution/engine/types.js +18 -0
  258. package/lib/execution/engine/types.js.map +1 -1
  259. package/lib/metrics/metrics/lodestar.d.ts +1 -0
  260. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  261. package/lib/metrics/metrics/lodestar.js +4 -0
  262. package/lib/metrics/metrics/lodestar.js.map +1 -1
  263. package/lib/network/gossip/interface.d.ts +7 -1
  264. package/lib/network/gossip/interface.d.ts.map +1 -1
  265. package/lib/network/gossip/interface.js +1 -0
  266. package/lib/network/gossip/interface.js.map +1 -1
  267. package/lib/network/gossip/scoringParameters.d.ts.map +1 -1
  268. package/lib/network/gossip/scoringParameters.js +12 -1
  269. package/lib/network/gossip/scoringParameters.js.map +1 -1
  270. package/lib/network/gossip/topic.d.ts +13 -2
  271. package/lib/network/gossip/topic.d.ts.map +1 -1
  272. package/lib/network/gossip/topic.js +6 -0
  273. package/lib/network/gossip/topic.js.map +1 -1
  274. package/lib/network/interface.d.ts +1 -0
  275. package/lib/network/interface.d.ts.map +1 -1
  276. package/lib/network/network.d.ts +1 -0
  277. package/lib/network/network.d.ts.map +1 -1
  278. package/lib/network/network.js +6 -1
  279. package/lib/network/network.js.map +1 -1
  280. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  281. package/lib/network/processor/gossipHandlers.js +64 -22
  282. package/lib/network/processor/gossipHandlers.js.map +1 -1
  283. package/lib/network/processor/gossipQueues/index.d.ts.map +1 -1
  284. package/lib/network/processor/gossipQueues/index.js +5 -0
  285. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  286. package/lib/network/processor/index.d.ts.map +1 -1
  287. package/lib/network/processor/index.js +6 -5
  288. package/lib/network/processor/index.js.map +1 -1
  289. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
  290. package/lib/network/reqresp/handlers/beaconBlocksByRange.js +16 -7
  291. package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
  292. package/lib/network/reqresp/handlers/beaconBlocksByRoot.d.ts.map +1 -1
  293. package/lib/network/reqresp/handlers/beaconBlocksByRoot.js +2 -0
  294. package/lib/network/reqresp/handlers/beaconBlocksByRoot.js.map +1 -1
  295. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts +2 -2
  296. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +1 -1
  297. package/lib/network/reqresp/handlers/blobSidecarsByRange.js +18 -8
  298. package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +1 -1
  299. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts.map +1 -1
  300. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js +6 -0
  301. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js.map +1 -1
  302. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts +2 -2
  303. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -1
  304. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +24 -8
  305. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -1
  306. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts.map +1 -1
  307. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js +9 -5
  308. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js.map +1 -1
  309. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.d.ts.map +1 -1
  310. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js +3 -8
  311. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js.map +1 -1
  312. package/lib/node/nodejs.d.ts.map +1 -1
  313. package/lib/node/nodejs.js +7 -2
  314. package/lib/node/nodejs.js.map +1 -1
  315. package/lib/node/notifier.d.ts.map +1 -1
  316. package/lib/node/notifier.js +2 -2
  317. package/lib/node/notifier.js.map +1 -1
  318. package/lib/sync/constants.d.ts +3 -1
  319. package/lib/sync/constants.d.ts.map +1 -1
  320. package/lib/sync/constants.js +3 -4
  321. package/lib/sync/constants.js.map +1 -1
  322. package/lib/sync/range/batch.d.ts +35 -5
  323. package/lib/sync/range/batch.d.ts.map +1 -1
  324. package/lib/sync/range/batch.js +240 -59
  325. package/lib/sync/range/batch.js.map +1 -1
  326. package/lib/sync/range/chain.d.ts +19 -4
  327. package/lib/sync/range/chain.d.ts.map +1 -1
  328. package/lib/sync/range/chain.js +64 -11
  329. package/lib/sync/range/chain.js.map +1 -1
  330. package/lib/sync/range/range.d.ts.map +1 -1
  331. package/lib/sync/range/range.js +31 -9
  332. package/lib/sync/range/range.js.map +1 -1
  333. package/lib/sync/sync.d.ts.map +1 -1
  334. package/lib/sync/sync.js +13 -0
  335. package/lib/sync/sync.js.map +1 -1
  336. package/lib/sync/types.d.ts +34 -0
  337. package/lib/sync/types.d.ts.map +1 -1
  338. package/lib/sync/types.js +34 -0
  339. package/lib/sync/types.js.map +1 -1
  340. package/lib/sync/unknownBlock.d.ts +29 -1
  341. package/lib/sync/unknownBlock.d.ts.map +1 -1
  342. package/lib/sync/unknownBlock.js +738 -61
  343. package/lib/sync/unknownBlock.js.map +1 -1
  344. package/lib/sync/utils/downloadByRange.d.ts +67 -10
  345. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  346. package/lib/sync/utils/downloadByRange.js +211 -26
  347. package/lib/sync/utils/downloadByRange.js.map +1 -1
  348. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  349. package/lib/sync/utils/downloadByRoot.js +16 -2
  350. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  351. package/lib/sync/utils/pendingBlocksTree.d.ts +0 -1
  352. package/lib/sync/utils/pendingBlocksTree.d.ts.map +1 -1
  353. package/lib/sync/utils/pendingBlocksTree.js +0 -9
  354. package/lib/sync/utils/pendingBlocksTree.js.map +1 -1
  355. package/lib/util/sszBytes.d.ts.map +1 -1
  356. package/lib/util/sszBytes.js +20 -5
  357. package/lib/util/sszBytes.js.map +1 -1
  358. package/package.json +17 -16
  359. package/src/api/impl/beacon/blocks/index.ts +51 -9
  360. package/src/api/impl/beacon/pool/index.ts +87 -1
  361. package/src/api/impl/beacon/state/index.ts +15 -15
  362. package/src/api/impl/beacon/state/utils.ts +2 -2
  363. package/src/api/impl/debug/index.ts +0 -1
  364. package/src/api/impl/lodestar/attesterSlashing.ts +43 -0
  365. package/src/api/impl/lodestar/index.ts +52 -2
  366. package/src/api/impl/validator/index.ts +91 -6
  367. package/src/chain/GetBlobsTracker.ts +1 -2
  368. package/src/chain/archiveStore/archiveStore.ts +5 -5
  369. package/src/chain/archiveStore/interface.ts +4 -4
  370. package/src/chain/archiveStore/strategies/frequencyStateArchiveStrategy.ts +6 -8
  371. package/src/chain/archiveStore/utils/archiveBlocks.ts +153 -94
  372. package/src/chain/blocks/blockInput/blockInput.ts +4 -1
  373. package/src/chain/blocks/importBlock.ts +45 -86
  374. package/src/chain/blocks/importExecutionPayload.ts +133 -103
  375. package/src/chain/blocks/index.ts +72 -24
  376. package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +64 -3
  377. package/src/chain/blocks/payloadEnvelopeInput/types.ts +18 -0
  378. package/src/chain/blocks/payloadEnvelopeProcessor.ts +7 -6
  379. package/src/chain/blocks/types.ts +16 -26
  380. package/src/chain/blocks/utils/chainSegment.ts +114 -17
  381. package/src/chain/blocks/verifyBlock.ts +70 -9
  382. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +8 -5
  383. package/src/chain/blocks/verifyBlocksSanityChecks.ts +26 -7
  384. package/src/chain/blocks/verifyBlocksSignatures.ts +9 -2
  385. package/src/chain/blocks/verifyExecutionPayloadEnvelope.ts +137 -0
  386. package/src/chain/blocks/verifyPayloadsDataAvailability.ts +41 -0
  387. package/src/chain/blocks/writePayloadEnvelopeInputToDb.ts +9 -18
  388. package/src/chain/chain.ts +102 -72
  389. package/src/chain/emitter.ts +15 -14
  390. package/src/chain/errors/attestationError.ts +6 -1
  391. package/src/chain/errors/blockError.ts +10 -1
  392. package/src/chain/errors/executionPayloadBid.ts +6 -0
  393. package/src/chain/errors/executionPayloadEnvelope.ts +6 -0
  394. package/src/chain/errors/index.ts +1 -0
  395. package/src/chain/errors/proposerPreferences.ts +47 -0
  396. package/src/chain/forkChoice/index.ts +19 -28
  397. package/src/chain/initState.ts +9 -1
  398. package/src/chain/interface.ts +16 -3
  399. package/src/chain/lightClient/index.ts +15 -3
  400. package/src/chain/opPools/aggregatedAttestationPool.ts +6 -1
  401. package/src/chain/opPools/executionPayloadBidPool.ts +3 -3
  402. package/src/chain/opPools/payloadAttestationPool.ts +29 -8
  403. package/src/chain/prepareNextSlot.ts +58 -19
  404. package/src/chain/produceBlock/computeNewStateRoot.ts +1 -37
  405. package/src/chain/produceBlock/produceBlockBody.ts +120 -26
  406. package/src/chain/regen/errors.ts +1 -6
  407. package/src/chain/regen/interface.ts +7 -12
  408. package/src/chain/regen/queued.ts +14 -55
  409. package/src/chain/regen/regen.ts +10 -43
  410. package/src/chain/seenCache/index.ts +1 -0
  411. package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +89 -21
  412. package/src/chain/seenCache/seenProposerPreferences.ts +32 -0
  413. package/src/chain/stateCache/datastore/db.ts +10 -33
  414. package/src/chain/stateCache/datastore/file.ts +5 -6
  415. package/src/chain/stateCache/datastore/types.ts +2 -3
  416. package/src/chain/stateCache/fifoBlockStateCache.ts +1 -10
  417. package/src/chain/stateCache/persistentCheckpointsCache.ts +139 -247
  418. package/src/chain/stateCache/types.ts +8 -14
  419. package/src/chain/validation/aggregateAndProof.ts +13 -0
  420. package/src/chain/validation/attestation.ts +13 -0
  421. package/src/chain/validation/block.ts +31 -7
  422. package/src/chain/validation/executionPayloadBid.ts +32 -11
  423. package/src/chain/validation/executionPayloadEnvelope.ts +32 -13
  424. package/src/chain/validation/payloadAttestationMessage.ts +9 -3
  425. package/src/chain/validation/proposerPreferences.ts +110 -0
  426. package/src/chain/validation/syncCommittee.ts +5 -1
  427. package/src/chain/validation/syncCommitteeContributionAndProof.ts +5 -1
  428. package/src/chain/validatorMonitor.ts +3 -2
  429. package/src/db/repositories/executionPayloadEnvelopeArchive.ts +1 -1
  430. package/src/execution/engine/http.ts +21 -14
  431. package/src/execution/engine/interface.ts +1 -0
  432. package/src/execution/engine/mock.ts +8 -1
  433. package/src/execution/engine/types.ts +41 -0
  434. package/src/metrics/metrics/lodestar.ts +4 -0
  435. package/src/network/gossip/interface.ts +6 -0
  436. package/src/network/gossip/scoringParameters.ts +14 -1
  437. package/src/network/gossip/topic.ts +6 -0
  438. package/src/network/interface.ts +1 -0
  439. package/src/network/network.ts +12 -1
  440. package/src/network/processor/gossipHandlers.ts +84 -27
  441. package/src/network/processor/gossipQueues/index.ts +5 -0
  442. package/src/network/processor/index.ts +6 -5
  443. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +17 -7
  444. package/src/network/reqresp/handlers/beaconBlocksByRoot.ts +3 -0
  445. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +26 -8
  446. package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +11 -0
  447. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +36 -8
  448. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRange.ts +10 -5
  449. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRoot.ts +3 -12
  450. package/src/node/nodejs.ts +8 -3
  451. package/src/node/notifier.ts +7 -2
  452. package/src/sync/constants.ts +4 -4
  453. package/src/sync/range/batch.ts +320 -67
  454. package/src/sync/range/chain.ts +89 -14
  455. package/src/sync/range/range.ts +34 -9
  456. package/src/sync/sync.ts +13 -1
  457. package/src/sync/types.ts +72 -0
  458. package/src/sync/unknownBlock.ts +928 -65
  459. package/src/sync/utils/downloadByRange.ts +378 -39
  460. package/src/sync/utils/downloadByRoot.ts +24 -2
  461. package/src/sync/utils/pendingBlocksTree.ts +0 -15
  462. package/src/util/sszBytes.ts +25 -5
@@ -2,23 +2,14 @@ import path from "node:path";
2
2
  import {PrivateKey} from "@libp2p/interface";
3
3
  import {Type} from "@chainsafe/ssz";
4
4
  import {BeaconConfig} from "@lodestar/config";
5
- import {
6
- CheckpointWithPayloadStatus,
7
- IForkChoice,
8
- PayloadStatus,
9
- ProtoBlock,
10
- UpdateHeadOpt,
11
- getCheckpointPayloadStatus,
12
- } from "@lodestar/fork-choice";
5
+ import {CheckpointWithHex, IForkChoice, ProtoBlock, UpdateHeadOpt} from "@lodestar/fork-choice";
13
6
  import {LoggerNode} from "@lodestar/logger/node";
14
7
  import {
15
- BUILDER_INDEX_SELF_BUILD,
16
8
  EFFECTIVE_BALANCE_INCREMENT,
17
9
  type ForkPostFulu,
18
10
  type ForkPostGloas,
19
11
  GENESIS_SLOT,
20
12
  SLOTS_PER_EPOCH,
21
- isForkPostElectra,
22
13
  isForkPostGloas,
23
14
  } from "@lodestar/params";
24
15
  import {
@@ -30,6 +21,9 @@ import {
30
21
  computeEpochAtSlot,
31
22
  computeStartSlotAtEpoch,
32
23
  getEffectiveBalancesFromStateBytes,
24
+ isStatePostAltair,
25
+ isStatePostElectra,
26
+ isStatePostGloas,
33
27
  } from "@lodestar/state-transition";
34
28
  import {
35
29
  BeaconBlock,
@@ -46,6 +40,7 @@ import {
46
40
  ValidatorIndex,
47
41
  Wei,
48
42
  deneb,
43
+ electra,
49
44
  gloas,
50
45
  isBlindedBeaconBlock,
51
46
  phase0,
@@ -98,8 +93,8 @@ import {
98
93
  } from "./opPools/index.js";
99
94
  import {IChainOptions} from "./options.js";
100
95
  import {PrepareNextSlotScheduler} from "./prepareNextSlot.js";
101
- import {computeEnvelopeStateRoot, computeNewStateRoot} from "./produceBlock/computeNewStateRoot.js";
102
- import {AssembledBlockType, BlockType, ProduceFullGloas, ProduceResult} from "./produceBlock/index.js";
96
+ import {computeNewStateRoot} from "./produceBlock/computeNewStateRoot.js";
97
+ import {AssembledBlockType, BlockType, ProduceResult} from "./produceBlock/index.js";
103
98
  import {BlockAttributes, produceBlockBody, produceCommonBlockBody} from "./produceBlock/produceBlockBody.js";
104
99
  import {QueuedStateRegenerator, RegenCaller} from "./regen/index.js";
105
100
  import {ReprocessController} from "./reprocess.js";
@@ -112,6 +107,7 @@ import {
112
107
  SeenExecutionPayloadBids,
113
108
  SeenPayloadAttesters,
114
109
  SeenPayloadEnvelopeInput,
110
+ SeenProposerPreferences,
115
111
  SeenSyncCommitteeMessages,
116
112
  } from "./seenCache/index.js";
117
113
  import {SeenAggregatedAttestations} from "./seenCache/seenAggregateAndProof.js";
@@ -123,7 +119,7 @@ import {DbCPStateDatastore, checkpointToDatastoreKey} from "./stateCache/datasto
123
119
  import {FileCPStateDatastore} from "./stateCache/datastore/file.js";
124
120
  import {CPStateDatastore} from "./stateCache/datastore/types.js";
125
121
  import {FIFOBlockStateCache} from "./stateCache/fifoBlockStateCache.js";
126
- import {PersistentCheckpointStateCache, fcCheckpointToHexPayload} from "./stateCache/persistentCheckpointsCache.js";
122
+ import {PersistentCheckpointStateCache} from "./stateCache/persistentCheckpointsCache.js";
127
123
  import {CheckpointStateCache} from "./stateCache/types.js";
128
124
  import {ValidatorMonitor} from "./validatorMonitor.js";
129
125
 
@@ -192,6 +188,7 @@ export class BeaconChain implements IBeaconChain {
192
188
  readonly seenPayloadAttesters = new SeenPayloadAttesters();
193
189
  readonly seenAggregatedAttestations: SeenAggregatedAttestations;
194
190
  readonly seenExecutionPayloadBids = new SeenExecutionPayloadBids();
191
+ readonly seenProposerPreferences = new SeenProposerPreferences();
195
192
  readonly seenBlockProposers = new SeenBlockProposers();
196
193
  readonly seenSyncCommitteeMessages = new SeenSyncCommitteeMessages();
197
194
  readonly seenContributionAndProof: SeenContributionAndProof;
@@ -339,13 +336,6 @@ export class BeaconChain implements IBeaconChain {
339
336
  metrics,
340
337
  logger,
341
338
  });
342
- this.seenPayloadEnvelopeInputCache = new SeenPayloadEnvelopeInput({
343
- chainEvents: emitter,
344
- signal,
345
- serializedCache: this.serializedCache,
346
- metrics,
347
- logger,
348
- });
349
339
 
350
340
  this._earliestAvailableSlot = anchorState.slot;
351
341
 
@@ -388,8 +378,7 @@ export class BeaconChain implements IBeaconChain {
388
378
  const {checkpoint} = anchorState.computeAnchorCheckpoint();
389
379
  blockStateCache.add(anchorState);
390
380
  blockStateCache.setHeadState(anchorState);
391
- const payloadPresent = getCheckpointPayloadStatus(config, anchorState, checkpoint.epoch) === PayloadStatus.FULL;
392
- checkpointStateCache.add(checkpoint, anchorState, payloadPresent);
381
+ checkpointStateCache.add(checkpoint, anchorState);
393
382
 
394
383
  const forkChoice = initializeForkChoice(
395
384
  config,
@@ -402,6 +391,7 @@ export class BeaconChain implements IBeaconChain {
402
391
  metrics,
403
392
  logger
404
393
  );
394
+
405
395
  const regen = new QueuedStateRegenerator({
406
396
  config,
407
397
  forkChoice,
@@ -426,6 +416,33 @@ export class BeaconChain implements IBeaconChain {
426
416
  this.payloadEnvelopeProcessor = new PayloadEnvelopeProcessor(this, metrics, signal);
427
417
 
428
418
  this.forkChoice = forkChoice;
419
+
420
+ this.seenPayloadEnvelopeInputCache = new SeenPayloadEnvelopeInput({
421
+ config,
422
+ clock,
423
+ forkChoice,
424
+ chainEvents: emitter,
425
+ signal,
426
+ serializedCache: this.serializedCache,
427
+ metrics,
428
+ logger,
429
+ });
430
+
431
+ const anchorBlockSlot = anchorState.latestBlockHeader.slot;
432
+ if (isStatePostGloas(anchorState) && anchorBlockSlot > 0) {
433
+ const anchorBid = anchorState.latestExecutionPayloadBid;
434
+ this.seenPayloadEnvelopeInputCache.addFromBid({
435
+ blockRootHex: toRootHex(checkpoint.root),
436
+ slot: anchorBlockSlot,
437
+ forkName: anchorState.forkName,
438
+ proposerIndex: anchorState.latestBlockHeader.proposerIndex,
439
+ bid: anchorBid,
440
+ sampledColumns: this.custodyConfig.sampledColumns,
441
+ custodyColumns: this.custodyConfig.custodyColumns,
442
+ timeCreatedSec: Math.floor(Date.now() / 1000),
443
+ });
444
+ }
445
+
429
446
  this.clock = clock;
430
447
  this.regen = regen;
431
448
  this.bls = bls;
@@ -683,16 +700,16 @@ export class BeaconChain implements IBeaconChain {
683
700
 
684
701
  // TODO GLOAS: Need to revisit the design of this api. Currently we just retrieve FULL state of the checkpoint for backwards compatibility.
685
702
  // because pre-gloas we always store FULL checkpoint state.
686
- const persistedKey = checkpointToDatastoreKey(checkpoint, true);
703
+ const persistedKey = checkpointToDatastoreKey(checkpoint);
687
704
  return this.cpStateDatastore.read(persistedKey);
688
705
  }
689
706
 
690
707
  getStateByCheckpoint(
691
- checkpoint: CheckpointWithPayloadStatus
708
+ checkpoint: CheckpointWithHex
692
709
  ): {state: IBeaconStateView; executionOptimistic: boolean; finalized: boolean} | null {
693
710
  // finalized or justified checkpoint states maynot be available with PersistentCheckpointStateCache, use getCheckpointStateOrBytes() api to get Uint8Array
694
- const checkpointHexPayload = fcCheckpointToHexPayload(checkpoint);
695
- const cachedStateCtx = this.regen.getCheckpointStateSync(checkpointHexPayload);
711
+ const checkpointHex = {epoch: checkpoint.epoch, rootHex: checkpoint.rootHex};
712
+ const cachedStateCtx = this.regen.getCheckpointStateSync(checkpointHex);
696
713
  if (cachedStateCtx) {
697
714
  const block = this.forkChoice.getBlockDefaultStatus(
698
715
  ssz.phase0.BeaconBlockHeader.hashTreeRoot(cachedStateCtx.latestBlockHeader)
@@ -709,10 +726,10 @@ export class BeaconChain implements IBeaconChain {
709
726
  }
710
727
 
711
728
  async getStateOrBytesByCheckpoint(
712
- checkpoint: CheckpointWithPayloadStatus
729
+ checkpoint: CheckpointWithHex
713
730
  ): Promise<{state: IBeaconStateView | Uint8Array; executionOptimistic: boolean; finalized: boolean} | null> {
714
- const checkpointHexPayload = fcCheckpointToHexPayload(checkpoint);
715
- const cachedStateCtx = await this.regen.getCheckpointStateOrBytes(checkpointHexPayload);
731
+ const checkpointHex = {epoch: checkpoint.epoch, rootHex: checkpoint.rootHex};
732
+ const cachedStateCtx = await this.regen.getCheckpointStateOrBytes(checkpointHex);
716
733
  if (cachedStateCtx) {
717
734
  const block = this.forkChoice.getBlockDefaultStatus(checkpoint.root);
718
735
  const finalizedEpoch = this.forkChoice.getFinalizedCheckpoint().epoch;
@@ -878,6 +895,37 @@ export class BeaconChain implements IBeaconChain {
878
895
  );
879
896
  }
880
897
 
898
+ async getExecutionPayloadEnvelope(
899
+ blockSlot: Slot,
900
+ blockRootHex: string
901
+ ): Promise<gloas.SignedExecutionPayloadEnvelope | null> {
902
+ const payloadInput = this.seenPayloadEnvelopeInputCache.get(blockRootHex);
903
+ if (payloadInput?.hasPayloadEnvelope()) {
904
+ return payloadInput.getPayloadEnvelope();
905
+ }
906
+
907
+ return (
908
+ (await this.db.executionPayloadEnvelope.get(fromHex(blockRootHex))) ??
909
+ (await this.db.executionPayloadEnvelopeArchive.get(blockSlot)) ??
910
+ null
911
+ );
912
+ }
913
+
914
+ async getParentExecutionRequests(
915
+ parentBlockSlot: Slot,
916
+ parentBlockRootHex: RootHex
917
+ ): Promise<electra.ExecutionRequests> {
918
+ // at the fork boundary, parent is pre-gloas
919
+ if (!isForkPostGloas(this.config.getForkName(parentBlockSlot))) {
920
+ return ssz.electra.ExecutionRequests.defaultValue();
921
+ }
922
+ const envelope = await this.getExecutionPayloadEnvelope(parentBlockSlot, parentBlockRootHex);
923
+ if (envelope === null) {
924
+ throw Error(`Parent execution payload envelope not found slot=${parentBlockSlot}, root=${parentBlockRootHex}`);
925
+ }
926
+ return envelope.message.executionRequests;
927
+ }
928
+
881
929
  async getDataColumnSidecars(blockSlot: Slot, blockRootHex: string): Promise<DataColumnSidecar[]> {
882
930
  const fork = this.config.getForkName(blockSlot);
883
931
 
@@ -1052,7 +1100,7 @@ export class BeaconChain implements IBeaconChain {
1052
1100
  body,
1053
1101
  } as AssembledBlockType<T>;
1054
1102
 
1055
- const {newStateRoot, proposerReward, postState} = computeNewStateRoot(this.metrics, state, block);
1103
+ const {newStateRoot, proposerReward} = computeNewStateRoot(this.metrics, state, block);
1056
1104
  block.stateRoot = newStateRoot;
1057
1105
  const blockRoot =
1058
1106
  produceResult.type === BlockType.Full
@@ -1061,23 +1109,9 @@ export class BeaconChain implements IBeaconChain {
1061
1109
  const blockRootHex = toRootHex(blockRoot);
1062
1110
 
1063
1111
  const fork = this.config.getForkName(slot);
1064
- if (isForkPostGloas(fork)) {
1065
- // TODO GLOAS: we should retire BlockType post-gloas, may need a new enum for self vs non-self built
1066
- if (produceResult.type !== BlockType.Full) {
1067
- throw Error(`Unexpected block type=${produceResult.type} for post-gloas fork=${fork}`);
1068
- }
1069
-
1070
- const gloasResult = produceResult as ProduceFullGloas;
1071
- const envelope: gloas.ExecutionPayloadEnvelope = {
1072
- payload: gloasResult.executionPayload,
1073
- executionRequests: gloasResult.executionRequests,
1074
- builderIndex: BUILDER_INDEX_SELF_BUILD,
1075
- beaconBlockRoot: blockRoot,
1076
- slot,
1077
- stateRoot: ZERO_HASH,
1078
- };
1079
- const envelopeStateRoot = computeEnvelopeStateRoot(this.metrics, postState, envelope);
1080
- gloasResult.envelopeStateRoot = envelopeStateRoot;
1112
+ // TODO GLOAS: we should retire BlockType post-gloas, may need a new enum for self vs non-self built
1113
+ if (isForkPostGloas(fork) && produceResult.type !== BlockType.Full) {
1114
+ throw Error(`Unexpected block type=${produceResult.type} for post-gloas fork=${fork}`);
1081
1115
  }
1082
1116
 
1083
1117
  // Track the produced block for consensus broadcast validations, later validation, etc.
@@ -1088,11 +1122,15 @@ export class BeaconChain implements IBeaconChain {
1088
1122
  }
1089
1123
 
1090
1124
  async processBlock(block: IBlockInput, opts?: ImportBlockOpts): Promise<void> {
1091
- return this.blockProcessor.processBlocksJob([block], opts);
1125
+ return this.blockProcessor.processBlocksJob([block], null, opts);
1092
1126
  }
1093
1127
 
1094
- async processChainSegment(blocks: IBlockInput[], opts?: ImportBlockOpts): Promise<void> {
1095
- return this.blockProcessor.processBlocksJob(blocks, opts);
1128
+ async processChainSegment(
1129
+ blocks: IBlockInput[],
1130
+ payloadEnvelopes: Map<Slot, PayloadEnvelopeInput> | null,
1131
+ opts?: ImportBlockOpts
1132
+ ): Promise<void> {
1133
+ await this.blockProcessor.processBlocksJob(blocks, payloadEnvelopes, opts);
1096
1134
  }
1097
1135
 
1098
1136
  async processExecutionPayload(payloadInput: PayloadEnvelopeInput, opts?: ImportPayloadOpts): Promise<void> {
@@ -1283,7 +1321,7 @@ export class BeaconChain implements IBeaconChain {
1283
1321
  * @param blockState state that declares justified checkpoint `checkpoint`
1284
1322
  */
1285
1323
  private justifiedBalancesGetter(
1286
- checkpoint: CheckpointWithPayloadStatus,
1324
+ checkpoint: CheckpointWithHex,
1287
1325
  blockState: IBeaconStateView
1288
1326
  ): EffectiveBalanceIncrements {
1289
1327
  this.metrics?.balancesCache.requests.inc();
@@ -1322,11 +1360,11 @@ export class BeaconChain implements IBeaconChain {
1322
1360
  * @param blockState state that declares justified checkpoint `checkpoint`
1323
1361
  */
1324
1362
  private closestJustifiedBalancesStateToCheckpoint(
1325
- checkpoint: CheckpointWithPayloadStatus,
1363
+ checkpoint: CheckpointWithHex,
1326
1364
  blockState: IBeaconStateView
1327
1365
  ): {state: IBeaconStateView; stateId: string; shouldWarn: boolean} {
1328
- const checkpointHexPayload = fcCheckpointToHexPayload(checkpoint);
1329
- const state = this.regen.getCheckpointStateSync(checkpointHexPayload);
1366
+ const checkpointHex = {epoch: checkpoint.epoch, rootHex: checkpoint.rootHex};
1367
+ const state = this.regen.getCheckpointStateSync(checkpointHex);
1330
1368
  if (state) {
1331
1369
  return {state, stateId: "checkpoint_state", shouldWarn: false};
1332
1370
  }
@@ -1337,10 +1375,7 @@ export class BeaconChain implements IBeaconChain {
1337
1375
  }
1338
1376
 
1339
1377
  // Find a state in the same branch of checkpoint at same epoch. Balances should exactly the same
1340
- for (const descendantBlock of this.forkChoice.forwardIterateDescendants(
1341
- checkpoint.rootHex,
1342
- checkpoint.payloadStatus
1343
- )) {
1378
+ for (const descendantBlock of this.forkChoice.forwardIterateDescendantsDefaultStatus(checkpoint.rootHex)) {
1344
1379
  if (computeEpochAtSlot(descendantBlock.slot) === checkpoint.epoch) {
1345
1380
  const descendantBlockState = this.regen.getStateSync(descendantBlock.stateRoot);
1346
1381
  if (descendantBlockState) {
@@ -1356,10 +1391,7 @@ export class BeaconChain implements IBeaconChain {
1356
1391
 
1357
1392
  // Find a state in the same branch of checkpoint at a latter epoch. Balances are not the same, but should be close
1358
1393
  // Note: must call .forwardIterateDescendants() again since nodes are not sorted
1359
- for (const descendantBlock of this.forkChoice.forwardIterateDescendants(
1360
- checkpoint.rootHex,
1361
- checkpoint.payloadStatus
1362
- )) {
1394
+ for (const descendantBlock of this.forkChoice.forwardIterateDescendantsDefaultStatus(checkpoint.rootHex)) {
1363
1395
  if (computeEpochAtSlot(descendantBlock.slot) > checkpoint.epoch) {
1364
1396
  const descendantBlockState = this.regen.getStateSync(descendantBlock.stateRoot);
1365
1397
  if (descendantBlockState) {
@@ -1404,9 +1436,7 @@ export class BeaconChain implements IBeaconChain {
1404
1436
  metrics.chain.blacklistedBlocks.set(this.blacklistedBlocks.size);
1405
1437
 
1406
1438
  const headState = this.getHeadState();
1407
- const fork = this.config.getForkName(headState.slot);
1408
-
1409
- if (isForkPostElectra(fork)) {
1439
+ if (isStatePostElectra(headState)) {
1410
1440
  metrics.pendingDeposits.set(headState.pendingDepositsCount);
1411
1441
  metrics.pendingPartialWithdrawals.set(headState.pendingPartialWithdrawalsCount);
1412
1442
  metrics.pendingConsolidations.set(headState.pendingConsolidationsCount);
@@ -1431,6 +1461,7 @@ export class BeaconChain implements IBeaconChain {
1431
1461
  this.payloadAttestationPool.prune(slot);
1432
1462
  this.executionPayloadBidPool.prune(slot);
1433
1463
  this.seenExecutionPayloadBids.prune(slot);
1464
+ this.seenProposerPreferences.prune(slot);
1434
1465
  this.seenAttestationDatas.onSlot(slot);
1435
1466
  this.reprocessController.onSlot(slot);
1436
1467
 
@@ -1452,10 +1483,6 @@ export class BeaconChain implements IBeaconChain {
1452
1483
  private onClockEpoch(epoch: Epoch): void {
1453
1484
  this.metrics?.clockEpoch.set(epoch);
1454
1485
 
1455
- if (epoch === this.config.GLOAS_FORK_EPOCH) {
1456
- this.regen.upgradeForGloas(epoch);
1457
- }
1458
-
1459
1486
  this.seenAttesters.prune(epoch);
1460
1487
  this.seenAggregators.prune(epoch);
1461
1488
  this.seenPayloadAttesters.prune(epoch);
@@ -1469,7 +1496,7 @@ export class BeaconChain implements IBeaconChain {
1469
1496
  this.seenContributionAndProof.prune(head.slot);
1470
1497
  }
1471
1498
 
1472
- private onForkChoiceJustified(this: BeaconChain, cp: CheckpointWithPayloadStatus): void {
1499
+ private onForkChoiceJustified(this: BeaconChain, cp: CheckpointWithHex): void {
1473
1500
  this.logger.verbose("Fork choice justified", {epoch: cp.epoch, root: cp.rootHex});
1474
1501
  }
1475
1502
 
@@ -1480,7 +1507,7 @@ export class BeaconChain implements IBeaconChain {
1480
1507
  });
1481
1508
  }
1482
1509
 
1483
- private async onForkChoiceFinalized(this: BeaconChain, cp: CheckpointWithPayloadStatus): Promise<void> {
1510
+ private async onForkChoiceFinalized(this: BeaconChain, cp: CheckpointWithHex): Promise<void> {
1484
1511
  this.logger.verbose("Fork choice finalized", {epoch: cp.epoch, root: cp.rootHex});
1485
1512
  const finalizedSlot = computeStartSlotAtEpoch(cp.epoch);
1486
1513
  this.seenBlockProposers.prune(finalizedSlot);
@@ -1521,7 +1548,7 @@ export class BeaconChain implements IBeaconChain {
1521
1548
  }
1522
1549
  }
1523
1550
 
1524
- private async updateValidatorsCustodyRequirement(finalizedCheckpoint: CheckpointWithPayloadStatus): Promise<void> {
1551
+ private async updateValidatorsCustodyRequirement(finalizedCheckpoint: CheckpointWithHex): Promise<void> {
1525
1552
  if (this.custodyConfig.targetCustodyGroupCount === this.config.NUMBER_OF_CUSTODY_GROUPS) {
1526
1553
  // Custody requirements can only be increased, we can disable dynamic custody updates
1527
1554
  // if the node already maintains custody of all custody groups in case it is configured
@@ -1653,6 +1680,9 @@ export class BeaconChain implements IBeaconChain {
1653
1680
  }
1654
1681
 
1655
1682
  preState = preState.processSlots(block.slot); // Dial preState's slot to block.slot
1683
+ if (!isStatePostAltair(preState)) {
1684
+ throw new Error("Sync committee rewards are not supported before Altair");
1685
+ }
1656
1686
 
1657
1687
  return preState.computeSyncCommitteeRewards(block, validatorIds ?? []);
1658
1688
  }
@@ -1,12 +1,12 @@
1
1
  import {EventEmitter} from "node:events";
2
2
  import {StrictEventEmitter} from "strict-event-emitter-types";
3
3
  import {routes} from "@lodestar/api";
4
- import {CheckpointWithPayloadStatus} from "@lodestar/fork-choice";
4
+ import {CheckpointWithHex} from "@lodestar/fork-choice";
5
5
  import {IBeaconStateView} from "@lodestar/state-transition";
6
6
  import {DataColumnSidecar, RootHex, deneb, phase0} from "@lodestar/types";
7
- import {SignedExecutionPayloadEnvelope} from "@lodestar/types/gloas";
8
7
  import {PeerIdStr} from "../util/peerId.js";
9
8
  import {BlockInputSource, IBlockInput} from "./blocks/blockInput/types.js";
9
+ import {PayloadEnvelopeInput} from "./blocks/payloadEnvelopeInput/payloadEnvelopeInput.js";
10
10
 
11
11
  /**
12
12
  * Important chain events that occur during normal chain operation.
@@ -59,10 +59,6 @@ export enum ChainEvent {
59
59
  * Post-gloas, missing parent could be a SignedBeaconBlock and/or a SignedExecutionPayloadEnvelope
60
60
  */
61
61
  blockUnknownParent = "blockUnknownParent",
62
- /**
63
- * Trigger BlockInputSync to find a SignedBeaconBlock given a SignedExecutionPayloadEnvelop received
64
- */
65
- envelopeUnknownBlock = "envelopeUnknownBlock",
66
62
  /**
67
63
  * Trigger BlockInputSync to find a SignedBeaconBlock with specified block root.
68
64
  */
@@ -76,6 +72,11 @@ export enum ChainEvent {
76
72
  * cut-off window passes for waiting on gossip
77
73
  */
78
74
  incompleteBlockInput = "incompleteBlockInput",
75
+ /**
76
+ * Post-gloas: trigger BlockInputSync for payload envelopes whose envelope and/or sampled columns are partially
77
+ * received via gossip but are not complete by time the cut-off window passes for waiting on gossip
78
+ */
79
+ incompletePayloadEnvelope = "incompletePayloadEnvelope",
79
80
  }
80
81
 
81
82
  export type HeadEventData = routes.events.EventData[routes.events.EventType.head];
@@ -86,21 +87,21 @@ type ApiEvents = {[K in routes.events.EventType]: (data: routes.events.EventData
86
87
 
87
88
  export type ChainEventData = {
88
89
  [ChainEvent.blockUnknownParent]: {blockInput: IBlockInput; peer: PeerIdStr; source: BlockInputSource};
89
- [ChainEvent.envelopeUnknownBlock]: {
90
- envelope: SignedExecutionPayloadEnvelope;
91
- peer?: PeerIdStr;
92
- source: BlockInputSource;
93
- };
94
90
  [ChainEvent.unknownBlockRoot]: {rootHex: RootHex; peer?: PeerIdStr; source: BlockInputSource};
95
91
  [ChainEvent.incompleteBlockInput]: {blockInput: IBlockInput; peer: PeerIdStr; source: BlockInputSource};
92
+ [ChainEvent.incompletePayloadEnvelope]: {
93
+ payloadInput: PayloadEnvelopeInput;
94
+ peer: PeerIdStr;
95
+ source: BlockInputSource;
96
+ };
96
97
  [ChainEvent.unknownEnvelopeBlockRoot]: {rootHex: RootHex; peer?: PeerIdStr; source: BlockInputSource};
97
98
  };
98
99
 
99
100
  export type IChainEvents = ApiEvents & {
100
101
  [ChainEvent.checkpoint]: (checkpoint: phase0.Checkpoint, state: IBeaconStateView) => void;
101
102
 
102
- [ChainEvent.forkChoiceJustified]: (checkpoint: CheckpointWithPayloadStatus) => void;
103
- [ChainEvent.forkChoiceFinalized]: (checkpoint: CheckpointWithPayloadStatus) => void;
103
+ [ChainEvent.forkChoiceJustified]: (checkpoint: CheckpointWithHex) => void;
104
+ [ChainEvent.forkChoiceFinalized]: (checkpoint: CheckpointWithHex) => void;
104
105
 
105
106
  [ChainEvent.updateTargetCustodyGroupCount]: (targetGroupCount: number) => void;
106
107
 
@@ -113,9 +114,9 @@ export type IChainEvents = ApiEvents & {
113
114
  // Sync events that are chain->chain. Initiated from network requests but do not cross the network
114
115
  // barrier so are considered ChainEvent(s).
115
116
  [ChainEvent.blockUnknownParent]: (data: ChainEventData[ChainEvent.blockUnknownParent]) => void;
116
- [ChainEvent.envelopeUnknownBlock]: (data: ChainEventData[ChainEvent.envelopeUnknownBlock]) => void;
117
117
  [ChainEvent.unknownBlockRoot]: (data: ChainEventData[ChainEvent.unknownBlockRoot]) => void;
118
118
  [ChainEvent.incompleteBlockInput]: (data: ChainEventData[ChainEvent.incompleteBlockInput]) => void;
119
+ [ChainEvent.incompletePayloadEnvelope]: (data: ChainEventData[ChainEvent.incompletePayloadEnvelope]) => void;
119
120
  [ChainEvent.unknownEnvelopeBlockRoot]: (data: ChainEventData[ChainEvent.unknownEnvelopeBlockRoot]) => void;
120
121
  };
121
122
 
@@ -147,6 +147,10 @@ export enum AttestationErrorCode {
147
147
  * Gloas: Current slot attestation is marking payload as present
148
148
  */
149
149
  PREMATURELY_INDICATED_PAYLOAD_PRESENT = "ATTESTATION_ERROR_PREMATURELY_INDICATED_PAYLOAD_PRESENT",
150
+ /**
151
+ * Gloas: index-1 attestation but the execution payload has not been seen yet
152
+ */
153
+ EXECUTION_PAYLOAD_NOT_SEEN = "ATTESTATION_ERROR_EXECUTION_PAYLOAD_NOT_SEEN",
150
154
  }
151
155
 
152
156
  export type AttestationErrorType =
@@ -185,7 +189,8 @@ export type AttestationErrorType =
185
189
  | {code: AttestationErrorCode.NON_ZERO_ATTESTATION_DATA_INDEX}
186
190
  | {code: AttestationErrorCode.ATTESTER_NOT_IN_COMMITTEE}
187
191
  | {code: AttestationErrorCode.INVALID_PAYLOAD_STATUS_VALUE; attDataIndex: number}
188
- | {code: AttestationErrorCode.PREMATURELY_INDICATED_PAYLOAD_PRESENT};
192
+ | {code: AttestationErrorCode.PREMATURELY_INDICATED_PAYLOAD_PRESENT}
193
+ | {code: AttestationErrorCode.EXECUTION_PAYLOAD_NOT_SEEN; beaconBlockRoot: RootHex};
189
194
 
190
195
  export class AttestationError extends GossipActionError<AttestationErrorType> {
191
196
  getMetadata(): Record<string, string | number | null> {
@@ -70,6 +70,12 @@ export enum BlockErrorCode {
70
70
  TOO_MANY_KZG_COMMITMENTS = "BLOCK_ERROR_TOO_MANY_KZG_COMMITMENTS",
71
71
  /** Bid parent block root does not match block parent root */
72
72
  BID_PARENT_ROOT_MISMATCH = "BLOCK_ERROR_BID_PARENT_ROOT_MISMATCH",
73
+ /** The parent block's execution payload has been verified as invalid */
74
+ PARENT_EXECUTION_INVALID = "BLOCK_ERROR_PARENT_EXECUTION_INVALID",
75
+ /** The block's parent execution payload (defined by bid.parent_block_hash) has not been seen */
76
+ PARENT_PAYLOAD_UNKNOWN = "BLOCK_ERROR_PARENT_PAYLOAD_UNKNOWN",
77
+ /** An execution payload envelope in the chain segment references a block root that does not match its slot's block */
78
+ ENVELOPE_BLOCK_ROOT_MISMATCH = "BLOCK_ERROR_ENVELOPE_BLOCK_ROOT_MISMATCH",
73
79
  }
74
80
 
75
81
  type ExecutionErrorStatus = Exclude<
@@ -103,6 +109,7 @@ export type BlockErrorType =
103
109
  | {code: BlockErrorCode.NOT_LATER_THAN_PARENT; parentSlot: Slot; slot: Slot}
104
110
  | {code: BlockErrorCode.NON_LINEAR_PARENT_ROOTS}
105
111
  | {code: BlockErrorCode.NON_LINEAR_SLOTS}
112
+ | {code: BlockErrorCode.ENVELOPE_BLOCK_ROOT_MISMATCH; envelopeBlockRoot: RootHex; blockRoot: RootHex}
106
113
  | {code: BlockErrorCode.PER_BLOCK_PROCESSING_ERROR; error: Error}
107
114
  | {code: BlockErrorCode.BEACON_CHAIN_ERROR; error: Error}
108
115
  | {code: BlockErrorCode.KNOWN_BAD_BLOCK}
@@ -114,7 +121,9 @@ export type BlockErrorType =
114
121
  | {code: BlockErrorCode.EXECUTION_ENGINE_ERROR; execStatus: ExecutionErrorStatus; errorMessage: string}
115
122
  | {code: BlockErrorCode.DATA_UNAVAILABLE}
116
123
  | {code: BlockErrorCode.TOO_MANY_KZG_COMMITMENTS; blobKzgCommitmentsLen: number; commitmentLimit: number}
117
- | {code: BlockErrorCode.BID_PARENT_ROOT_MISMATCH; bidParentRoot: RootHex; blockParentRoot: RootHex};
124
+ | {code: BlockErrorCode.BID_PARENT_ROOT_MISMATCH; bidParentRoot: RootHex; blockParentRoot: RootHex}
125
+ | {code: BlockErrorCode.PARENT_EXECUTION_INVALID; parentRoot: RootHex}
126
+ | {code: BlockErrorCode.PARENT_PAYLOAD_UNKNOWN; parentRoot: RootHex; parentBlockHash: RootHex};
118
127
 
119
128
  export class BlockGossipError extends GossipActionError<BlockErrorType> {}
120
129
 
@@ -7,6 +7,7 @@ export enum ExecutionPayloadBidErrorCode {
7
7
  BID_ALREADY_KNOWN = "EXECUTION_PAYLOAD_BID_ERROR_BID_ALREADY_KNOWN",
8
8
  BID_TOO_LOW = "EXECUTION_PAYLOAD_BID_ERROR_BID_TOO_LOW",
9
9
  BID_TOO_HIGH = "EXECUTION_PAYLOAD_BID_ERROR_BID_TOO_HIGH",
10
+ TOO_MANY_KZG_COMMITMENTS = "EXECUTION_PAYLOAD_BID_ERROR_TOO_MANY_KZG_COMMITMENTS",
10
11
  UNKNOWN_BLOCK_ROOT = "EXECUTION_PAYLOAD_BID_ERROR_UNKNOWN_BLOCK_ROOT",
11
12
  INVALID_SLOT = "EXECUTION_PAYLOAD_BID_ERROR_INVALID_SLOT",
12
13
  INVALID_SIGNATURE = "EXECUTION_PAYLOAD_BID_ERROR_INVALID_SIGNATURE",
@@ -28,6 +29,11 @@ export type ExecutionPayloadBidErrorType =
28
29
  }
29
30
  | {code: ExecutionPayloadBidErrorCode.BID_TOO_LOW; bidValue: number; currentHighestBid: number}
30
31
  | {code: ExecutionPayloadBidErrorCode.BID_TOO_HIGH; bidValue: number; builderBalance: number}
32
+ | {
33
+ code: ExecutionPayloadBidErrorCode.TOO_MANY_KZG_COMMITMENTS;
34
+ blobKzgCommitmentsLen: number;
35
+ commitmentLimit: number;
36
+ }
31
37
  | {code: ExecutionPayloadBidErrorCode.UNKNOWN_BLOCK_ROOT; parentBlockRoot: RootHex}
32
38
  | {code: ExecutionPayloadBidErrorCode.INVALID_SLOT; builderIndex: BuilderIndex; slot: Slot}
33
39
  | {code: ExecutionPayloadBidErrorCode.INVALID_SIGNATURE; builderIndex: BuilderIndex; slot: Slot};
@@ -11,6 +11,7 @@ export enum ExecutionPayloadEnvelopeErrorCode {
11
11
  SLOT_MISMATCH = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_SLOT_MISMATCH",
12
12
  BUILDER_INDEX_MISMATCH = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_BUILDER_INDEX_MISMATCH",
13
13
  BLOCK_HASH_MISMATCH = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_BLOCK_HASH_MISMATCH",
14
+ EXECUTION_REQUESTS_ROOT_MISMATCH = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_EXECUTION_REQUESTS_ROOT_MISMATCH",
14
15
  INVALID_SIGNATURE = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_INVALID_SIGNATURE",
15
16
  PAYLOAD_ENVELOPE_INPUT_MISSING = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_PAYLOAD_ENVELOPE_INPUT_MISSING",
16
17
  }
@@ -36,6 +37,11 @@ export type ExecutionPayloadEnvelopeErrorType =
36
37
  envelopeBlockHash: RootHex;
37
38
  bidBlockHash: RootHex | null;
38
39
  }
40
+ | {
41
+ code: ExecutionPayloadEnvelopeErrorCode.EXECUTION_REQUESTS_ROOT_MISMATCH;
42
+ envelopeRequestsRoot: RootHex;
43
+ bidRequestsRoot: RootHex;
44
+ }
39
45
  | {code: ExecutionPayloadEnvelopeErrorCode.INVALID_SIGNATURE}
40
46
  | {code: ExecutionPayloadEnvelopeErrorCode.PAYLOAD_ENVELOPE_INPUT_MISSING; blockRoot: RootHex};
41
47
 
@@ -8,6 +8,7 @@ export * from "./executionPayloadBid.js";
8
8
  export * from "./executionPayloadEnvelope.js";
9
9
  export * from "./gossipValidation.js";
10
10
  export * from "./payloadAttestation.js";
11
+ export * from "./proposerPreferences.js";
11
12
  export * from "./proposerSlashingError.js";
12
13
  export * from "./syncCommitteeError.js";
13
14
  export * from "./voluntaryExitError.js";
@@ -0,0 +1,47 @@
1
+ import {RootHex, Slot, ValidatorIndex} from "@lodestar/types";
2
+ import {GossipActionError} from "./gossipValidation.js";
3
+
4
+ export enum ProposerPreferencesErrorCode {
5
+ INVALID_EPOCH = "PROPOSER_PREFERENCES_ERROR_INVALID_EPOCH",
6
+ PROPOSAL_SLOT_PASSED = "PROPOSER_PREFERENCES_ERROR_PROPOSAL_SLOT_PASSED",
7
+ UNKNOWN_DEPENDENT_ROOT = "PROPOSER_PREFERENCES_ERROR_UNKNOWN_DEPENDENT_ROOT",
8
+ INVALID_PROPOSER = "PROPOSER_PREFERENCES_ERROR_INVALID_PROPOSER",
9
+ ALREADY_KNOWN = "PROPOSER_PREFERENCES_ERROR_ALREADY_KNOWN",
10
+ INVALID_SIGNATURE = "PROPOSER_PREFERENCES_ERROR_INVALID_SIGNATURE",
11
+ }
12
+
13
+ export type ProposerPreferencesErrorType =
14
+ | {
15
+ code: ProposerPreferencesErrorCode.INVALID_EPOCH;
16
+ proposalSlot: Slot;
17
+ currentEpoch: number;
18
+ }
19
+ | {
20
+ code: ProposerPreferencesErrorCode.PROPOSAL_SLOT_PASSED;
21
+ proposalSlot: Slot;
22
+ currentSlot: Slot;
23
+ }
24
+ | {
25
+ code: ProposerPreferencesErrorCode.UNKNOWN_DEPENDENT_ROOT;
26
+ proposalSlot: Slot;
27
+ dependentRoot: RootHex;
28
+ }
29
+ | {
30
+ code: ProposerPreferencesErrorCode.INVALID_PROPOSER;
31
+ proposalSlot: Slot;
32
+ validatorIndex: ValidatorIndex;
33
+ dependentRoot: RootHex;
34
+ }
35
+ | {
36
+ code: ProposerPreferencesErrorCode.ALREADY_KNOWN;
37
+ proposalSlot: Slot;
38
+ validatorIndex: ValidatorIndex;
39
+ dependentRoot: RootHex;
40
+ }
41
+ | {
42
+ code: ProposerPreferencesErrorCode.INVALID_SIGNATURE;
43
+ proposalSlot: Slot;
44
+ validatorIndex: ValidatorIndex;
45
+ };
46
+
47
+ export class ProposerPreferencesError extends GossipActionError<ProposerPreferencesErrorType> {}