@lodestar/beacon-node 1.42.0 → 1.43.0-dev.07452fe3b7

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 (444) 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/importBlock.d.ts.map +1 -1
  43. package/lib/chain/blocks/importBlock.js +51 -53
  44. package/lib/chain/blocks/importBlock.js.map +1 -1
  45. package/lib/chain/blocks/importExecutionPayload.d.ts +28 -14
  46. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  47. package/lib/chain/blocks/importExecutionPayload.js +95 -86
  48. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  49. package/lib/chain/blocks/index.d.ts +5 -3
  50. package/lib/chain/blocks/index.d.ts.map +1 -1
  51. package/lib/chain/blocks/index.js +59 -26
  52. package/lib/chain/blocks/index.js.map +1 -1
  53. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +4 -0
  54. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -1
  55. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +25 -1
  56. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -1
  57. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +1 -0
  58. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -1
  59. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +5 -0
  60. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts.map +1 -1
  61. package/lib/chain/blocks/payloadEnvelopeProcessor.js +7 -5
  62. package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -1
  63. package/lib/chain/blocks/types.d.ts +16 -21
  64. package/lib/chain/blocks/types.d.ts.map +1 -1
  65. package/lib/chain/blocks/utils/chainSegment.d.ts +23 -2
  66. package/lib/chain/blocks/utils/chainSegment.d.ts.map +1 -1
  67. package/lib/chain/blocks/utils/chainSegment.js +89 -12
  68. package/lib/chain/blocks/utils/chainSegment.js.map +1 -1
  69. package/lib/chain/blocks/verifyBlock.d.ts +5 -3
  70. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  71. package/lib/chain/blocks/verifyBlock.js +50 -7
  72. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  73. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +0 -4
  74. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  75. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +8 -4
  76. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  77. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts +2 -1
  78. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -1
  79. package/lib/chain/blocks/verifyBlocksSanityChecks.js +25 -5
  80. package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
  81. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  82. package/lib/chain/blocks/verifyBlocksSignatures.js +4 -2
  83. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  84. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts +24 -0
  85. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts.map +1 -0
  86. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js +79 -0
  87. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js.map +1 -0
  88. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts +14 -0
  89. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts.map +1 -0
  90. package/lib/chain/blocks/verifyPayloadsDataAvailability.js +30 -0
  91. package/lib/chain/blocks/verifyPayloadsDataAvailability.js.map +1 -0
  92. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts +1 -1
  93. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts.map +1 -1
  94. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js +2 -11
  95. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js.map +1 -1
  96. package/lib/chain/chain.d.ts +9 -6
  97. package/lib/chain/chain.d.ts.map +1 -1
  98. package/lib/chain/chain.js +51 -42
  99. package/lib/chain/chain.js.map +1 -1
  100. package/lib/chain/emitter.d.ts +16 -15
  101. package/lib/chain/emitter.d.ts.map +1 -1
  102. package/lib/chain/emitter.js +5 -4
  103. package/lib/chain/emitter.js.map +1 -1
  104. package/lib/chain/errors/attestationError.d.ts +8 -1
  105. package/lib/chain/errors/attestationError.d.ts.map +1 -1
  106. package/lib/chain/errors/attestationError.js +4 -0
  107. package/lib/chain/errors/attestationError.js.map +1 -1
  108. package/lib/chain/errors/blockError.d.ts +18 -1
  109. package/lib/chain/errors/blockError.d.ts.map +1 -1
  110. package/lib/chain/errors/blockError.js +6 -0
  111. package/lib/chain/errors/blockError.js.map +1 -1
  112. package/lib/chain/errors/executionPayloadBid.d.ts +5 -0
  113. package/lib/chain/errors/executionPayloadBid.d.ts.map +1 -1
  114. package/lib/chain/errors/executionPayloadBid.js +1 -0
  115. package/lib/chain/errors/executionPayloadBid.js.map +1 -1
  116. package/lib/chain/errors/executionPayloadEnvelope.d.ts +5 -0
  117. package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
  118. package/lib/chain/errors/executionPayloadEnvelope.js +1 -0
  119. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
  120. package/lib/chain/errors/index.d.ts +1 -0
  121. package/lib/chain/errors/index.d.ts.map +1 -1
  122. package/lib/chain/errors/index.js +1 -0
  123. package/lib/chain/errors/index.js.map +1 -1
  124. package/lib/chain/errors/proposerPreferences.d.ts +33 -0
  125. package/lib/chain/errors/proposerPreferences.d.ts.map +1 -0
  126. package/lib/chain/errors/proposerPreferences.js +13 -0
  127. package/lib/chain/errors/proposerPreferences.js.map +1 -0
  128. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  129. package/lib/chain/forkChoice/index.js +21 -23
  130. package/lib/chain/forkChoice/index.js.map +1 -1
  131. package/lib/chain/interface.d.ts +8 -5
  132. package/lib/chain/interface.d.ts.map +1 -1
  133. package/lib/chain/interface.js.map +1 -1
  134. package/lib/chain/lightClient/index.d.ts +2 -2
  135. package/lib/chain/lightClient/index.d.ts.map +1 -1
  136. package/lib/chain/lightClient/index.js +7 -0
  137. package/lib/chain/lightClient/index.js.map +1 -1
  138. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  139. package/lib/chain/opPools/aggregatedAttestationPool.js +5 -2
  140. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  141. package/lib/chain/opPools/executionPayloadBidPool.d.ts +2 -2
  142. package/lib/chain/opPools/executionPayloadBidPool.d.ts.map +1 -1
  143. package/lib/chain/opPools/executionPayloadBidPool.js +2 -2
  144. package/lib/chain/opPools/executionPayloadBidPool.js.map +1 -1
  145. package/lib/chain/opPools/payloadAttestationPool.d.ts +3 -2
  146. package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
  147. package/lib/chain/opPools/payloadAttestationPool.js +26 -4
  148. package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
  149. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  150. package/lib/chain/prepareNextSlot.js +48 -18
  151. package/lib/chain/prepareNextSlot.js.map +1 -1
  152. package/lib/chain/produceBlock/computeNewStateRoot.d.ts +1 -7
  153. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
  154. package/lib/chain/produceBlock/computeNewStateRoot.js +1 -28
  155. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  156. package/lib/chain/produceBlock/produceBlockBody.d.ts +15 -10
  157. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  158. package/lib/chain/produceBlock/produceBlockBody.js +83 -21
  159. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  160. package/lib/chain/regen/errors.d.ts +1 -11
  161. package/lib/chain/regen/errors.d.ts.map +1 -1
  162. package/lib/chain/regen/errors.js +0 -2
  163. package/lib/chain/regen/errors.js.map +1 -1
  164. package/lib/chain/regen/interface.d.ts +7 -12
  165. package/lib/chain/regen/interface.d.ts.map +1 -1
  166. package/lib/chain/regen/interface.js +1 -0
  167. package/lib/chain/regen/interface.js.map +1 -1
  168. package/lib/chain/regen/queued.d.ts +6 -11
  169. package/lib/chain/regen/queued.d.ts.map +1 -1
  170. package/lib/chain/regen/queued.js +9 -44
  171. package/lib/chain/regen/queued.js.map +1 -1
  172. package/lib/chain/regen/regen.d.ts +0 -5
  173. package/lib/chain/regen/regen.d.ts.map +1 -1
  174. package/lib/chain/regen/regen.js +8 -38
  175. package/lib/chain/regen/regen.js.map +1 -1
  176. package/lib/chain/seenCache/index.d.ts +1 -0
  177. package/lib/chain/seenCache/index.d.ts.map +1 -1
  178. package/lib/chain/seenCache/index.js +1 -0
  179. package/lib/chain/seenCache/index.js.map +1 -1
  180. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +19 -6
  181. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -1
  182. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +40 -22
  183. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -1
  184. package/lib/chain/seenCache/seenProposerPreferences.d.ts +15 -0
  185. package/lib/chain/seenCache/seenProposerPreferences.d.ts.map +1 -0
  186. package/lib/chain/seenCache/seenProposerPreferences.js +25 -0
  187. package/lib/chain/seenCache/seenProposerPreferences.js.map +1 -0
  188. package/lib/chain/stateCache/datastore/db.d.ts +5 -4
  189. package/lib/chain/stateCache/datastore/db.d.ts.map +1 -1
  190. package/lib/chain/stateCache/datastore/db.js +10 -32
  191. package/lib/chain/stateCache/datastore/db.js.map +1 -1
  192. package/lib/chain/stateCache/datastore/file.d.ts +1 -1
  193. package/lib/chain/stateCache/datastore/file.d.ts.map +1 -1
  194. package/lib/chain/stateCache/datastore/file.js +5 -5
  195. package/lib/chain/stateCache/datastore/file.js.map +1 -1
  196. package/lib/chain/stateCache/datastore/types.d.ts +1 -1
  197. package/lib/chain/stateCache/datastore/types.d.ts.map +1 -1
  198. package/lib/chain/stateCache/fifoBlockStateCache.d.ts +1 -7
  199. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -1
  200. package/lib/chain/stateCache/fifoBlockStateCache.js +0 -8
  201. package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
  202. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +13 -30
  203. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  204. package/lib/chain/stateCache/persistentCheckpointsCache.js +120 -216
  205. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  206. package/lib/chain/stateCache/types.d.ts +8 -15
  207. package/lib/chain/stateCache/types.d.ts.map +1 -1
  208. package/lib/chain/stateCache/types.js.map +1 -1
  209. package/lib/chain/validation/aggregateAndProof.js +12 -0
  210. package/lib/chain/validation/aggregateAndProof.js.map +1 -1
  211. package/lib/chain/validation/attestation.d.ts.map +1 -1
  212. package/lib/chain/validation/attestation.js +12 -0
  213. package/lib/chain/validation/attestation.js.map +1 -1
  214. package/lib/chain/validation/block.d.ts.map +1 -1
  215. package/lib/chain/validation/block.js +28 -5
  216. package/lib/chain/validation/block.js.map +1 -1
  217. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  218. package/lib/chain/validation/executionPayloadBid.js +19 -4
  219. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  220. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
  221. package/lib/chain/validation/executionPayloadEnvelope.js +27 -12
  222. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  223. package/lib/chain/validation/payloadAttestationMessage.d.ts.map +1 -1
  224. package/lib/chain/validation/payloadAttestationMessage.js +8 -4
  225. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
  226. package/lib/chain/validation/proposerPreferences.d.ts +8 -0
  227. package/lib/chain/validation/proposerPreferences.d.ts.map +1 -0
  228. package/lib/chain/validation/proposerPreferences.js +69 -0
  229. package/lib/chain/validation/proposerPreferences.js.map +1 -0
  230. package/lib/chain/validation/syncCommittee.d.ts.map +1 -1
  231. package/lib/chain/validation/syncCommittee.js +4 -0
  232. package/lib/chain/validation/syncCommittee.js.map +1 -1
  233. package/lib/chain/validation/syncCommitteeContributionAndProof.js +4 -1
  234. package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
  235. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  236. package/lib/chain/validatorMonitor.js +3 -3
  237. package/lib/chain/validatorMonitor.js.map +1 -1
  238. package/lib/db/repositories/executionPayloadEnvelopeArchive.js +1 -1
  239. package/lib/db/repositories/executionPayloadEnvelopeArchive.js.map +1 -1
  240. package/lib/execution/engine/http.d.ts.map +1 -1
  241. package/lib/execution/engine/http.js +21 -14
  242. package/lib/execution/engine/http.js.map +1 -1
  243. package/lib/execution/engine/interface.d.ts +1 -0
  244. package/lib/execution/engine/interface.d.ts.map +1 -1
  245. package/lib/execution/engine/mock.d.ts.map +1 -1
  246. package/lib/execution/engine/mock.js +6 -0
  247. package/lib/execution/engine/mock.js.map +1 -1
  248. package/lib/execution/engine/types.d.ts +20 -0
  249. package/lib/execution/engine/types.d.ts.map +1 -1
  250. package/lib/execution/engine/types.js +18 -0
  251. package/lib/execution/engine/types.js.map +1 -1
  252. package/lib/metrics/metrics/lodestar.d.ts +1 -0
  253. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  254. package/lib/metrics/metrics/lodestar.js +4 -0
  255. package/lib/metrics/metrics/lodestar.js.map +1 -1
  256. package/lib/network/gossip/interface.d.ts +7 -1
  257. package/lib/network/gossip/interface.d.ts.map +1 -1
  258. package/lib/network/gossip/interface.js +1 -0
  259. package/lib/network/gossip/interface.js.map +1 -1
  260. package/lib/network/gossip/scoringParameters.d.ts.map +1 -1
  261. package/lib/network/gossip/scoringParameters.js +12 -1
  262. package/lib/network/gossip/scoringParameters.js.map +1 -1
  263. package/lib/network/gossip/topic.d.ts +31 -748
  264. package/lib/network/gossip/topic.d.ts.map +1 -1
  265. package/lib/network/gossip/topic.js +6 -0
  266. package/lib/network/gossip/topic.js.map +1 -1
  267. package/lib/network/interface.d.ts +1 -0
  268. package/lib/network/interface.d.ts.map +1 -1
  269. package/lib/network/network.d.ts +1 -0
  270. package/lib/network/network.d.ts.map +1 -1
  271. package/lib/network/network.js +6 -1
  272. package/lib/network/network.js.map +1 -1
  273. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  274. package/lib/network/processor/gossipHandlers.js +50 -22
  275. package/lib/network/processor/gossipHandlers.js.map +1 -1
  276. package/lib/network/processor/gossipQueues/index.d.ts.map +1 -1
  277. package/lib/network/processor/gossipQueues/index.js +5 -0
  278. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  279. package/lib/network/processor/index.d.ts.map +1 -1
  280. package/lib/network/processor/index.js +6 -5
  281. package/lib/network/processor/index.js.map +1 -1
  282. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
  283. package/lib/network/reqresp/handlers/beaconBlocksByRange.js +16 -7
  284. package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
  285. package/lib/network/reqresp/handlers/beaconBlocksByRoot.d.ts.map +1 -1
  286. package/lib/network/reqresp/handlers/beaconBlocksByRoot.js +2 -0
  287. package/lib/network/reqresp/handlers/beaconBlocksByRoot.js.map +1 -1
  288. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts +2 -2
  289. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +1 -1
  290. package/lib/network/reqresp/handlers/blobSidecarsByRange.js +18 -8
  291. package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +1 -1
  292. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts.map +1 -1
  293. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js +6 -0
  294. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js.map +1 -1
  295. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts +2 -2
  296. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -1
  297. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +24 -8
  298. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -1
  299. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts.map +1 -1
  300. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js +9 -5
  301. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js.map +1 -1
  302. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.d.ts.map +1 -1
  303. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js +3 -8
  304. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js.map +1 -1
  305. package/lib/node/nodejs.d.ts.map +1 -1
  306. package/lib/node/nodejs.js +7 -2
  307. package/lib/node/nodejs.js.map +1 -1
  308. package/lib/node/notifier.d.ts.map +1 -1
  309. package/lib/node/notifier.js +2 -2
  310. package/lib/node/notifier.js.map +1 -1
  311. package/lib/sync/range/batch.d.ts +23 -2
  312. package/lib/sync/range/batch.d.ts.map +1 -1
  313. package/lib/sync/range/batch.js +84 -33
  314. package/lib/sync/range/batch.js.map +1 -1
  315. package/lib/sync/range/chain.d.ts +6 -2
  316. package/lib/sync/range/chain.d.ts.map +1 -1
  317. package/lib/sync/range/chain.js +26 -7
  318. package/lib/sync/range/chain.js.map +1 -1
  319. package/lib/sync/range/range.d.ts.map +1 -1
  320. package/lib/sync/range/range.js +17 -6
  321. package/lib/sync/range/range.js.map +1 -1
  322. package/lib/sync/types.d.ts +34 -0
  323. package/lib/sync/types.d.ts.map +1 -1
  324. package/lib/sync/types.js +34 -0
  325. package/lib/sync/types.js.map +1 -1
  326. package/lib/sync/unknownBlock.d.ts +22 -1
  327. package/lib/sync/unknownBlock.d.ts.map +1 -1
  328. package/lib/sync/unknownBlock.js +602 -53
  329. package/lib/sync/unknownBlock.js.map +1 -1
  330. package/lib/sync/utils/downloadByRange.d.ts +46 -10
  331. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  332. package/lib/sync/utils/downloadByRange.js +164 -24
  333. package/lib/sync/utils/downloadByRange.js.map +1 -1
  334. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  335. package/lib/sync/utils/downloadByRoot.js +16 -2
  336. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  337. package/lib/sync/utils/pendingBlocksTree.d.ts +0 -1
  338. package/lib/sync/utils/pendingBlocksTree.d.ts.map +1 -1
  339. package/lib/sync/utils/pendingBlocksTree.js +0 -9
  340. package/lib/sync/utils/pendingBlocksTree.js.map +1 -1
  341. package/lib/util/sszBytes.d.ts.map +1 -1
  342. package/lib/util/sszBytes.js +20 -5
  343. package/lib/util/sszBytes.js.map +1 -1
  344. package/package.json +17 -16
  345. package/src/api/impl/beacon/blocks/index.ts +51 -9
  346. package/src/api/impl/beacon/pool/index.ts +87 -1
  347. package/src/api/impl/beacon/state/index.ts +15 -15
  348. package/src/api/impl/beacon/state/utils.ts +2 -2
  349. package/src/api/impl/debug/index.ts +0 -1
  350. package/src/api/impl/lodestar/attesterSlashing.ts +43 -0
  351. package/src/api/impl/lodestar/index.ts +52 -2
  352. package/src/api/impl/validator/index.ts +91 -6
  353. package/src/chain/GetBlobsTracker.ts +1 -2
  354. package/src/chain/archiveStore/archiveStore.ts +5 -5
  355. package/src/chain/archiveStore/interface.ts +4 -4
  356. package/src/chain/archiveStore/strategies/frequencyStateArchiveStrategy.ts +6 -8
  357. package/src/chain/archiveStore/utils/archiveBlocks.ts +153 -94
  358. package/src/chain/blocks/importBlock.ts +57 -80
  359. package/src/chain/blocks/importExecutionPayload.ts +116 -98
  360. package/src/chain/blocks/index.ts +74 -24
  361. package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +33 -1
  362. package/src/chain/blocks/payloadEnvelopeInput/types.ts +1 -0
  363. package/src/chain/blocks/payloadEnvelopeProcessor.ts +7 -6
  364. package/src/chain/blocks/types.ts +16 -26
  365. package/src/chain/blocks/utils/chainSegment.ts +114 -17
  366. package/src/chain/blocks/verifyBlock.ts +70 -9
  367. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +8 -5
  368. package/src/chain/blocks/verifyBlocksSanityChecks.ts +26 -7
  369. package/src/chain/blocks/verifyBlocksSignatures.ts +9 -2
  370. package/src/chain/blocks/verifyExecutionPayloadEnvelope.ts +134 -0
  371. package/src/chain/blocks/verifyPayloadsDataAvailability.ts +41 -0
  372. package/src/chain/blocks/writePayloadEnvelopeInputToDb.ts +9 -18
  373. package/src/chain/chain.ts +75 -65
  374. package/src/chain/emitter.ts +15 -14
  375. package/src/chain/errors/attestationError.ts +6 -1
  376. package/src/chain/errors/blockError.ts +10 -1
  377. package/src/chain/errors/executionPayloadBid.ts +6 -0
  378. package/src/chain/errors/executionPayloadEnvelope.ts +6 -0
  379. package/src/chain/errors/index.ts +1 -0
  380. package/src/chain/errors/proposerPreferences.ts +39 -0
  381. package/src/chain/forkChoice/index.ts +19 -28
  382. package/src/chain/interface.ts +16 -3
  383. package/src/chain/lightClient/index.ts +15 -3
  384. package/src/chain/opPools/aggregatedAttestationPool.ts +6 -1
  385. package/src/chain/opPools/executionPayloadBidPool.ts +3 -3
  386. package/src/chain/opPools/payloadAttestationPool.ts +29 -8
  387. package/src/chain/prepareNextSlot.ts +58 -19
  388. package/src/chain/produceBlock/computeNewStateRoot.ts +1 -37
  389. package/src/chain/produceBlock/produceBlockBody.ts +120 -26
  390. package/src/chain/regen/errors.ts +1 -6
  391. package/src/chain/regen/interface.ts +7 -12
  392. package/src/chain/regen/queued.ts +14 -55
  393. package/src/chain/regen/regen.ts +10 -43
  394. package/src/chain/seenCache/index.ts +1 -0
  395. package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +47 -25
  396. package/src/chain/seenCache/seenProposerPreferences.ts +29 -0
  397. package/src/chain/stateCache/datastore/db.ts +10 -33
  398. package/src/chain/stateCache/datastore/file.ts +5 -6
  399. package/src/chain/stateCache/datastore/types.ts +2 -3
  400. package/src/chain/stateCache/fifoBlockStateCache.ts +1 -10
  401. package/src/chain/stateCache/persistentCheckpointsCache.ts +139 -247
  402. package/src/chain/stateCache/types.ts +8 -14
  403. package/src/chain/validation/aggregateAndProof.ts +13 -0
  404. package/src/chain/validation/attestation.ts +13 -0
  405. package/src/chain/validation/block.ts +31 -7
  406. package/src/chain/validation/executionPayloadBid.ts +21 -3
  407. package/src/chain/validation/executionPayloadEnvelope.ts +32 -13
  408. package/src/chain/validation/payloadAttestationMessage.ts +9 -3
  409. package/src/chain/validation/proposerPreferences.ts +91 -0
  410. package/src/chain/validation/syncCommittee.ts +5 -1
  411. package/src/chain/validation/syncCommitteeContributionAndProof.ts +5 -1
  412. package/src/chain/validatorMonitor.ts +3 -2
  413. package/src/db/repositories/executionPayloadEnvelopeArchive.ts +1 -1
  414. package/src/execution/engine/http.ts +21 -14
  415. package/src/execution/engine/interface.ts +1 -0
  416. package/src/execution/engine/mock.ts +8 -1
  417. package/src/execution/engine/types.ts +41 -0
  418. package/src/metrics/metrics/lodestar.ts +4 -0
  419. package/src/network/gossip/interface.ts +6 -0
  420. package/src/network/gossip/scoringParameters.ts +14 -1
  421. package/src/network/gossip/topic.ts +6 -0
  422. package/src/network/interface.ts +1 -0
  423. package/src/network/network.ts +12 -1
  424. package/src/network/processor/gossipHandlers.ts +66 -27
  425. package/src/network/processor/gossipQueues/index.ts +5 -0
  426. package/src/network/processor/index.ts +6 -5
  427. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +17 -7
  428. package/src/network/reqresp/handlers/beaconBlocksByRoot.ts +3 -0
  429. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +26 -8
  430. package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +11 -0
  431. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +36 -8
  432. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRange.ts +10 -5
  433. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRoot.ts +3 -12
  434. package/src/node/nodejs.ts +8 -3
  435. package/src/node/notifier.ts +7 -2
  436. package/src/sync/range/batch.ts +142 -38
  437. package/src/sync/range/chain.ts +37 -9
  438. package/src/sync/range/range.ts +18 -6
  439. package/src/sync/types.ts +72 -0
  440. package/src/sync/unknownBlock.ts +760 -57
  441. package/src/sync/utils/downloadByRange.ts +274 -39
  442. package/src/sync/utils/downloadByRoot.ts +24 -2
  443. package/src/sync/utils/pendingBlocksTree.ts +0 -15
  444. 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,8 @@ import {
30
21
  computeEpochAtSlot,
31
22
  computeStartSlotAtEpoch,
32
23
  getEffectiveBalancesFromStateBytes,
24
+ isStatePostAltair,
25
+ isStatePostElectra,
33
26
  } from "@lodestar/state-transition";
34
27
  import {
35
28
  BeaconBlock,
@@ -46,6 +39,7 @@ import {
46
39
  ValidatorIndex,
47
40
  Wei,
48
41
  deneb,
42
+ electra,
49
43
  gloas,
50
44
  isBlindedBeaconBlock,
51
45
  phase0,
@@ -98,8 +92,8 @@ import {
98
92
  } from "./opPools/index.js";
99
93
  import {IChainOptions} from "./options.js";
100
94
  import {PrepareNextSlotScheduler} from "./prepareNextSlot.js";
101
- import {computeEnvelopeStateRoot, computeNewStateRoot} from "./produceBlock/computeNewStateRoot.js";
102
- import {AssembledBlockType, BlockType, ProduceFullGloas, ProduceResult} from "./produceBlock/index.js";
95
+ import {computeNewStateRoot} from "./produceBlock/computeNewStateRoot.js";
96
+ import {AssembledBlockType, BlockType, ProduceResult} from "./produceBlock/index.js";
103
97
  import {BlockAttributes, produceBlockBody, produceCommonBlockBody} from "./produceBlock/produceBlockBody.js";
104
98
  import {QueuedStateRegenerator, RegenCaller} from "./regen/index.js";
105
99
  import {ReprocessController} from "./reprocess.js";
@@ -112,6 +106,7 @@ import {
112
106
  SeenExecutionPayloadBids,
113
107
  SeenPayloadAttesters,
114
108
  SeenPayloadEnvelopeInput,
109
+ SeenProposerPreferences,
115
110
  SeenSyncCommitteeMessages,
116
111
  } from "./seenCache/index.js";
117
112
  import {SeenAggregatedAttestations} from "./seenCache/seenAggregateAndProof.js";
@@ -123,7 +118,7 @@ import {DbCPStateDatastore, checkpointToDatastoreKey} from "./stateCache/datasto
123
118
  import {FileCPStateDatastore} from "./stateCache/datastore/file.js";
124
119
  import {CPStateDatastore} from "./stateCache/datastore/types.js";
125
120
  import {FIFOBlockStateCache} from "./stateCache/fifoBlockStateCache.js";
126
- import {PersistentCheckpointStateCache, fcCheckpointToHexPayload} from "./stateCache/persistentCheckpointsCache.js";
121
+ import {PersistentCheckpointStateCache} from "./stateCache/persistentCheckpointsCache.js";
127
122
  import {CheckpointStateCache} from "./stateCache/types.js";
128
123
  import {ValidatorMonitor} from "./validatorMonitor.js";
129
124
 
@@ -192,6 +187,7 @@ export class BeaconChain implements IBeaconChain {
192
187
  readonly seenPayloadAttesters = new SeenPayloadAttesters();
193
188
  readonly seenAggregatedAttestations: SeenAggregatedAttestations;
194
189
  readonly seenExecutionPayloadBids = new SeenExecutionPayloadBids();
190
+ readonly seenProposerPreferences = new SeenProposerPreferences();
195
191
  readonly seenBlockProposers = new SeenBlockProposers();
196
192
  readonly seenSyncCommitteeMessages = new SeenSyncCommitteeMessages();
197
193
  readonly seenContributionAndProof: SeenContributionAndProof;
@@ -340,6 +336,8 @@ export class BeaconChain implements IBeaconChain {
340
336
  logger,
341
337
  });
342
338
  this.seenPayloadEnvelopeInputCache = new SeenPayloadEnvelopeInput({
339
+ config,
340
+ clock,
343
341
  chainEvents: emitter,
344
342
  signal,
345
343
  serializedCache: this.serializedCache,
@@ -388,8 +386,7 @@ export class BeaconChain implements IBeaconChain {
388
386
  const {checkpoint} = anchorState.computeAnchorCheckpoint();
389
387
  blockStateCache.add(anchorState);
390
388
  blockStateCache.setHeadState(anchorState);
391
- const payloadPresent = getCheckpointPayloadStatus(config, anchorState, checkpoint.epoch) === PayloadStatus.FULL;
392
- checkpointStateCache.add(checkpoint, anchorState, payloadPresent);
389
+ checkpointStateCache.add(checkpoint, anchorState);
393
390
 
394
391
  const forkChoice = initializeForkChoice(
395
392
  config,
@@ -683,16 +680,16 @@ export class BeaconChain implements IBeaconChain {
683
680
 
684
681
  // TODO GLOAS: Need to revisit the design of this api. Currently we just retrieve FULL state of the checkpoint for backwards compatibility.
685
682
  // because pre-gloas we always store FULL checkpoint state.
686
- const persistedKey = checkpointToDatastoreKey(checkpoint, true);
683
+ const persistedKey = checkpointToDatastoreKey(checkpoint);
687
684
  return this.cpStateDatastore.read(persistedKey);
688
685
  }
689
686
 
690
687
  getStateByCheckpoint(
691
- checkpoint: CheckpointWithPayloadStatus
688
+ checkpoint: CheckpointWithHex
692
689
  ): {state: IBeaconStateView; executionOptimistic: boolean; finalized: boolean} | null {
693
690
  // 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);
691
+ const checkpointHex = {epoch: checkpoint.epoch, rootHex: checkpoint.rootHex};
692
+ const cachedStateCtx = this.regen.getCheckpointStateSync(checkpointHex);
696
693
  if (cachedStateCtx) {
697
694
  const block = this.forkChoice.getBlockDefaultStatus(
698
695
  ssz.phase0.BeaconBlockHeader.hashTreeRoot(cachedStateCtx.latestBlockHeader)
@@ -709,10 +706,10 @@ export class BeaconChain implements IBeaconChain {
709
706
  }
710
707
 
711
708
  async getStateOrBytesByCheckpoint(
712
- checkpoint: CheckpointWithPayloadStatus
709
+ checkpoint: CheckpointWithHex
713
710
  ): Promise<{state: IBeaconStateView | Uint8Array; executionOptimistic: boolean; finalized: boolean} | null> {
714
- const checkpointHexPayload = fcCheckpointToHexPayload(checkpoint);
715
- const cachedStateCtx = await this.regen.getCheckpointStateOrBytes(checkpointHexPayload);
711
+ const checkpointHex = {epoch: checkpoint.epoch, rootHex: checkpoint.rootHex};
712
+ const cachedStateCtx = await this.regen.getCheckpointStateOrBytes(checkpointHex);
716
713
  if (cachedStateCtx) {
717
714
  const block = this.forkChoice.getBlockDefaultStatus(checkpoint.root);
718
715
  const finalizedEpoch = this.forkChoice.getFinalizedCheckpoint().epoch;
@@ -878,6 +875,37 @@ export class BeaconChain implements IBeaconChain {
878
875
  );
879
876
  }
880
877
 
878
+ async getExecutionPayloadEnvelope(
879
+ blockSlot: Slot,
880
+ blockRootHex: string
881
+ ): Promise<gloas.SignedExecutionPayloadEnvelope | null> {
882
+ const payloadInput = this.seenPayloadEnvelopeInputCache.get(blockRootHex);
883
+ if (payloadInput?.hasPayloadEnvelope()) {
884
+ return payloadInput.getPayloadEnvelope();
885
+ }
886
+
887
+ return (
888
+ (await this.db.executionPayloadEnvelope.get(fromHex(blockRootHex))) ??
889
+ (await this.db.executionPayloadEnvelopeArchive.get(blockSlot)) ??
890
+ null
891
+ );
892
+ }
893
+
894
+ async getParentExecutionRequests(
895
+ parentBlockSlot: Slot,
896
+ parentBlockRootHex: RootHex
897
+ ): Promise<electra.ExecutionRequests> {
898
+ // at the fork boundary, parent is pre-gloas
899
+ if (!isForkPostGloas(this.config.getForkName(parentBlockSlot))) {
900
+ return ssz.electra.ExecutionRequests.defaultValue();
901
+ }
902
+ const envelope = await this.getExecutionPayloadEnvelope(parentBlockSlot, parentBlockRootHex);
903
+ if (envelope === null) {
904
+ throw Error(`Parent execution payload envelope not found slot=${parentBlockSlot}, root=${parentBlockRootHex}`);
905
+ }
906
+ return envelope.message.executionRequests;
907
+ }
908
+
881
909
  async getDataColumnSidecars(blockSlot: Slot, blockRootHex: string): Promise<DataColumnSidecar[]> {
882
910
  const fork = this.config.getForkName(blockSlot);
883
911
 
@@ -1052,7 +1080,7 @@ export class BeaconChain implements IBeaconChain {
1052
1080
  body,
1053
1081
  } as AssembledBlockType<T>;
1054
1082
 
1055
- const {newStateRoot, proposerReward, postState} = computeNewStateRoot(this.metrics, state, block);
1083
+ const {newStateRoot, proposerReward} = computeNewStateRoot(this.metrics, state, block);
1056
1084
  block.stateRoot = newStateRoot;
1057
1085
  const blockRoot =
1058
1086
  produceResult.type === BlockType.Full
@@ -1061,23 +1089,9 @@ export class BeaconChain implements IBeaconChain {
1061
1089
  const blockRootHex = toRootHex(blockRoot);
1062
1090
 
1063
1091
  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;
1092
+ // TODO GLOAS: we should retire BlockType post-gloas, may need a new enum for self vs non-self built
1093
+ if (isForkPostGloas(fork) && produceResult.type !== BlockType.Full) {
1094
+ throw Error(`Unexpected block type=${produceResult.type} for post-gloas fork=${fork}`);
1081
1095
  }
1082
1096
 
1083
1097
  // Track the produced block for consensus broadcast validations, later validation, etc.
@@ -1088,11 +1102,15 @@ export class BeaconChain implements IBeaconChain {
1088
1102
  }
1089
1103
 
1090
1104
  async processBlock(block: IBlockInput, opts?: ImportBlockOpts): Promise<void> {
1091
- return this.blockProcessor.processBlocksJob([block], opts);
1105
+ return this.blockProcessor.processBlocksJob([block], null, opts);
1092
1106
  }
1093
1107
 
1094
- async processChainSegment(blocks: IBlockInput[], opts?: ImportBlockOpts): Promise<void> {
1095
- return this.blockProcessor.processBlocksJob(blocks, opts);
1108
+ async processChainSegment(
1109
+ blocks: IBlockInput[],
1110
+ payloadEnvelopes: Map<Slot, PayloadEnvelopeInput> | null,
1111
+ opts?: ImportBlockOpts
1112
+ ): Promise<void> {
1113
+ await this.blockProcessor.processBlocksJob(blocks, payloadEnvelopes, opts);
1096
1114
  }
1097
1115
 
1098
1116
  async processExecutionPayload(payloadInput: PayloadEnvelopeInput, opts?: ImportPayloadOpts): Promise<void> {
@@ -1283,7 +1301,7 @@ export class BeaconChain implements IBeaconChain {
1283
1301
  * @param blockState state that declares justified checkpoint `checkpoint`
1284
1302
  */
1285
1303
  private justifiedBalancesGetter(
1286
- checkpoint: CheckpointWithPayloadStatus,
1304
+ checkpoint: CheckpointWithHex,
1287
1305
  blockState: IBeaconStateView
1288
1306
  ): EffectiveBalanceIncrements {
1289
1307
  this.metrics?.balancesCache.requests.inc();
@@ -1322,11 +1340,11 @@ export class BeaconChain implements IBeaconChain {
1322
1340
  * @param blockState state that declares justified checkpoint `checkpoint`
1323
1341
  */
1324
1342
  private closestJustifiedBalancesStateToCheckpoint(
1325
- checkpoint: CheckpointWithPayloadStatus,
1343
+ checkpoint: CheckpointWithHex,
1326
1344
  blockState: IBeaconStateView
1327
1345
  ): {state: IBeaconStateView; stateId: string; shouldWarn: boolean} {
1328
- const checkpointHexPayload = fcCheckpointToHexPayload(checkpoint);
1329
- const state = this.regen.getCheckpointStateSync(checkpointHexPayload);
1346
+ const checkpointHex = {epoch: checkpoint.epoch, rootHex: checkpoint.rootHex};
1347
+ const state = this.regen.getCheckpointStateSync(checkpointHex);
1330
1348
  if (state) {
1331
1349
  return {state, stateId: "checkpoint_state", shouldWarn: false};
1332
1350
  }
@@ -1337,10 +1355,7 @@ export class BeaconChain implements IBeaconChain {
1337
1355
  }
1338
1356
 
1339
1357
  // 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
- )) {
1358
+ for (const descendantBlock of this.forkChoice.forwardIterateDescendantsDefaultStatus(checkpoint.rootHex)) {
1344
1359
  if (computeEpochAtSlot(descendantBlock.slot) === checkpoint.epoch) {
1345
1360
  const descendantBlockState = this.regen.getStateSync(descendantBlock.stateRoot);
1346
1361
  if (descendantBlockState) {
@@ -1356,10 +1371,7 @@ export class BeaconChain implements IBeaconChain {
1356
1371
 
1357
1372
  // Find a state in the same branch of checkpoint at a latter epoch. Balances are not the same, but should be close
1358
1373
  // 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
- )) {
1374
+ for (const descendantBlock of this.forkChoice.forwardIterateDescendantsDefaultStatus(checkpoint.rootHex)) {
1363
1375
  if (computeEpochAtSlot(descendantBlock.slot) > checkpoint.epoch) {
1364
1376
  const descendantBlockState = this.regen.getStateSync(descendantBlock.stateRoot);
1365
1377
  if (descendantBlockState) {
@@ -1404,9 +1416,7 @@ export class BeaconChain implements IBeaconChain {
1404
1416
  metrics.chain.blacklistedBlocks.set(this.blacklistedBlocks.size);
1405
1417
 
1406
1418
  const headState = this.getHeadState();
1407
- const fork = this.config.getForkName(headState.slot);
1408
-
1409
- if (isForkPostElectra(fork)) {
1419
+ if (isStatePostElectra(headState)) {
1410
1420
  metrics.pendingDeposits.set(headState.pendingDepositsCount);
1411
1421
  metrics.pendingPartialWithdrawals.set(headState.pendingPartialWithdrawalsCount);
1412
1422
  metrics.pendingConsolidations.set(headState.pendingConsolidationsCount);
@@ -1431,6 +1441,7 @@ export class BeaconChain implements IBeaconChain {
1431
1441
  this.payloadAttestationPool.prune(slot);
1432
1442
  this.executionPayloadBidPool.prune(slot);
1433
1443
  this.seenExecutionPayloadBids.prune(slot);
1444
+ this.seenProposerPreferences.prune(slot);
1434
1445
  this.seenAttestationDatas.onSlot(slot);
1435
1446
  this.reprocessController.onSlot(slot);
1436
1447
 
@@ -1452,10 +1463,6 @@ export class BeaconChain implements IBeaconChain {
1452
1463
  private onClockEpoch(epoch: Epoch): void {
1453
1464
  this.metrics?.clockEpoch.set(epoch);
1454
1465
 
1455
- if (epoch === this.config.GLOAS_FORK_EPOCH) {
1456
- this.regen.upgradeForGloas(epoch);
1457
- }
1458
-
1459
1466
  this.seenAttesters.prune(epoch);
1460
1467
  this.seenAggregators.prune(epoch);
1461
1468
  this.seenPayloadAttesters.prune(epoch);
@@ -1469,7 +1476,7 @@ export class BeaconChain implements IBeaconChain {
1469
1476
  this.seenContributionAndProof.prune(head.slot);
1470
1477
  }
1471
1478
 
1472
- private onForkChoiceJustified(this: BeaconChain, cp: CheckpointWithPayloadStatus): void {
1479
+ private onForkChoiceJustified(this: BeaconChain, cp: CheckpointWithHex): void {
1473
1480
  this.logger.verbose("Fork choice justified", {epoch: cp.epoch, root: cp.rootHex});
1474
1481
  }
1475
1482
 
@@ -1480,7 +1487,7 @@ export class BeaconChain implements IBeaconChain {
1480
1487
  });
1481
1488
  }
1482
1489
 
1483
- private async onForkChoiceFinalized(this: BeaconChain, cp: CheckpointWithPayloadStatus): Promise<void> {
1490
+ private async onForkChoiceFinalized(this: BeaconChain, cp: CheckpointWithHex): Promise<void> {
1484
1491
  this.logger.verbose("Fork choice finalized", {epoch: cp.epoch, root: cp.rootHex});
1485
1492
  const finalizedSlot = computeStartSlotAtEpoch(cp.epoch);
1486
1493
  this.seenBlockProposers.prune(finalizedSlot);
@@ -1521,7 +1528,7 @@ export class BeaconChain implements IBeaconChain {
1521
1528
  }
1522
1529
  }
1523
1530
 
1524
- private async updateValidatorsCustodyRequirement(finalizedCheckpoint: CheckpointWithPayloadStatus): Promise<void> {
1531
+ private async updateValidatorsCustodyRequirement(finalizedCheckpoint: CheckpointWithHex): Promise<void> {
1525
1532
  if (this.custodyConfig.targetCustodyGroupCount === this.config.NUMBER_OF_CUSTODY_GROUPS) {
1526
1533
  // Custody requirements can only be increased, we can disable dynamic custody updates
1527
1534
  // if the node already maintains custody of all custody groups in case it is configured
@@ -1653,6 +1660,9 @@ export class BeaconChain implements IBeaconChain {
1653
1660
  }
1654
1661
 
1655
1662
  preState = preState.processSlots(block.slot); // Dial preState's slot to block.slot
1663
+ if (!isStatePostAltair(preState)) {
1664
+ throw new Error("Sync committee rewards are not supported before Altair");
1665
+ }
1656
1666
 
1657
1667
  return preState.computeSyncCommitteeRewards(block, validatorIds ?? []);
1658
1668
  }
@@ -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,39 @@
1
+ import {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
+ INVALID_PROPOSER = "PROPOSER_PREFERENCES_ERROR_INVALID_PROPOSER",
8
+ ALREADY_KNOWN = "PROPOSER_PREFERENCES_ERROR_ALREADY_KNOWN",
9
+ INVALID_SIGNATURE = "PROPOSER_PREFERENCES_ERROR_INVALID_SIGNATURE",
10
+ }
11
+
12
+ export type ProposerPreferencesErrorType =
13
+ | {
14
+ code: ProposerPreferencesErrorCode.INVALID_EPOCH;
15
+ proposalSlot: Slot;
16
+ currentEpoch: number;
17
+ }
18
+ | {
19
+ code: ProposerPreferencesErrorCode.PROPOSAL_SLOT_PASSED;
20
+ proposalSlot: Slot;
21
+ currentSlot: Slot;
22
+ }
23
+ | {
24
+ code: ProposerPreferencesErrorCode.INVALID_PROPOSER;
25
+ proposalSlot: Slot;
26
+ validatorIndex: ValidatorIndex;
27
+ }
28
+ | {
29
+ code: ProposerPreferencesErrorCode.ALREADY_KNOWN;
30
+ proposalSlot: Slot;
31
+ validatorIndex: ValidatorIndex;
32
+ }
33
+ | {
34
+ code: ProposerPreferencesErrorCode.INVALID_SIGNATURE;
35
+ proposalSlot: Slot;
36
+ validatorIndex: ValidatorIndex;
37
+ };
38
+
39
+ export class ProposerPreferencesError extends GossipActionError<ProposerPreferencesErrorType> {}