@lodestar/beacon-node 1.42.0-dev.c3829113f4 → 1.42.0-dev.c58e92512e

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 (466) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +25 -13
  3. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  4. package/lib/api/impl/beacon/pool/index.d.ts.map +1 -1
  5. package/lib/api/impl/beacon/pool/index.js +5 -1
  6. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  7. package/lib/api/impl/beacon/state/index.d.ts.map +1 -1
  8. package/lib/api/impl/beacon/state/index.js +38 -40
  9. package/lib/api/impl/beacon/state/index.js.map +1 -1
  10. package/lib/api/impl/beacon/state/utils.d.ts +4 -4
  11. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
  12. package/lib/api/impl/beacon/state/utils.js +7 -10
  13. package/lib/api/impl/beacon/state/utils.js.map +1 -1
  14. package/lib/api/impl/debug/index.js.map +1 -1
  15. package/lib/api/impl/lodestar/index.d.ts.map +1 -1
  16. package/lib/api/impl/lodestar/index.js +8 -6
  17. package/lib/api/impl/lodestar/index.js.map +1 -1
  18. package/lib/api/impl/proof/index.d.ts.map +1 -1
  19. package/lib/api/impl/proof/index.js +2 -6
  20. package/lib/api/impl/proof/index.js.map +1 -1
  21. package/lib/api/impl/validator/index.d.ts.map +1 -1
  22. package/lib/api/impl/validator/index.js +33 -27
  23. package/lib/api/impl/validator/index.js.map +1 -1
  24. package/lib/api/impl/validator/utils.d.ts +2 -2
  25. package/lib/api/impl/validator/utils.d.ts.map +1 -1
  26. package/lib/api/impl/validator/utils.js +3 -3
  27. package/lib/api/impl/validator/utils.js.map +1 -1
  28. package/lib/chain/ColumnReconstructionTracker.d.ts +2 -1
  29. package/lib/chain/ColumnReconstructionTracker.d.ts.map +1 -1
  30. package/lib/chain/ColumnReconstructionTracker.js +5 -5
  31. package/lib/chain/ColumnReconstructionTracker.js.map +1 -1
  32. package/lib/chain/GetBlobsTracker.d.ts +2 -1
  33. package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
  34. package/lib/chain/GetBlobsTracker.js +14 -12
  35. package/lib/chain/GetBlobsTracker.js.map +1 -1
  36. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  37. package/lib/chain/archiveStore/archiveStore.js +1 -0
  38. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  39. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts +3 -7
  40. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +1 -1
  41. package/lib/chain/archiveStore/historicalState/getHistoricalState.js +8 -26
  42. package/lib/chain/archiveStore/historicalState/getHistoricalState.js.map +1 -1
  43. package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts +2 -2
  44. package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts.map +1 -1
  45. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js +1 -0
  46. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js.map +1 -1
  47. package/lib/chain/archiveStore/historicalState/types.d.ts +2 -0
  48. package/lib/chain/archiveStore/historicalState/types.d.ts.map +1 -1
  49. package/lib/chain/archiveStore/historicalState/types.js.map +1 -1
  50. package/lib/chain/archiveStore/historicalState/worker.js +1 -3
  51. package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
  52. package/lib/chain/archiveStore/interface.d.ts +1 -0
  53. package/lib/chain/archiveStore/interface.d.ts.map +1 -1
  54. package/lib/chain/balancesCache.d.ts +2 -2
  55. package/lib/chain/balancesCache.d.ts.map +1 -1
  56. package/lib/chain/balancesCache.js +4 -4
  57. package/lib/chain/balancesCache.js.map +1 -1
  58. package/lib/chain/blocks/blockInput/blockInput.d.ts +5 -5
  59. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
  60. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  61. package/lib/chain/blocks/blockInput/types.d.ts +5 -4
  62. package/lib/chain/blocks/blockInput/types.d.ts.map +1 -1
  63. package/lib/chain/blocks/blockInput/types.js +1 -0
  64. package/lib/chain/blocks/blockInput/types.js.map +1 -1
  65. package/lib/chain/blocks/importBlock.d.ts +3 -3
  66. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  67. package/lib/chain/blocks/importBlock.js +37 -23
  68. package/lib/chain/blocks/importBlock.js.map +1 -1
  69. package/lib/chain/blocks/importExecutionPayload.d.ts +10 -8
  70. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  71. package/lib/chain/blocks/importExecutionPayload.js +87 -51
  72. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  73. package/lib/chain/blocks/index.d.ts.map +1 -1
  74. package/lib/chain/blocks/index.js +3 -2
  75. package/lib/chain/blocks/index.js.map +1 -1
  76. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +14 -6
  77. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -1
  78. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +33 -2
  79. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -1
  80. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +2 -1
  81. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -1
  82. package/lib/chain/blocks/types.d.ts +21 -15
  83. package/lib/chain/blocks/types.d.ts.map +1 -1
  84. package/lib/chain/blocks/types.js.map +1 -1
  85. package/lib/chain/blocks/utils/checkpoint.d.ts +2 -2
  86. package/lib/chain/blocks/utils/checkpoint.d.ts.map +1 -1
  87. package/lib/chain/blocks/utils/checkpoint.js.map +1 -1
  88. package/lib/chain/blocks/verifyBlock.d.ts +2 -2
  89. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  90. package/lib/chain/blocks/verifyBlock.js +4 -4
  91. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  92. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +5 -5
  93. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  94. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +5 -4
  95. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  96. package/lib/chain/blocks/verifyBlocksSignatures.d.ts +2 -2
  97. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  98. package/lib/chain/blocks/verifyBlocksSignatures.js +4 -2
  99. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  100. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts +3 -3
  101. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +1 -1
  102. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js +3 -3
  103. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
  104. package/lib/chain/chain.d.ts +15 -14
  105. package/lib/chain/chain.d.ts.map +1 -1
  106. package/lib/chain/chain.js +110 -62
  107. package/lib/chain/chain.js.map +1 -1
  108. package/lib/chain/emitter.d.ts +31 -9
  109. package/lib/chain/emitter.d.ts.map +1 -1
  110. package/lib/chain/emitter.js +12 -3
  111. package/lib/chain/emitter.js.map +1 -1
  112. package/lib/chain/errors/blockError.d.ts +4 -4
  113. package/lib/chain/errors/blockError.d.ts.map +1 -1
  114. package/lib/chain/errors/dataColumnSidecarError.d.ts +31 -1
  115. package/lib/chain/errors/dataColumnSidecarError.d.ts.map +1 -1
  116. package/lib/chain/errors/dataColumnSidecarError.js +7 -0
  117. package/lib/chain/errors/dataColumnSidecarError.js.map +1 -1
  118. package/lib/chain/forkChoice/index.d.ts +4 -4
  119. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  120. package/lib/chain/forkChoice/index.js +30 -24
  121. package/lib/chain/forkChoice/index.js.map +1 -1
  122. package/lib/chain/initState.d.ts +2 -2
  123. package/lib/chain/initState.d.ts.map +1 -1
  124. package/lib/chain/initState.js +1 -1
  125. package/lib/chain/initState.js.map +1 -1
  126. package/lib/chain/interface.d.ts +15 -14
  127. package/lib/chain/interface.d.ts.map +1 -1
  128. package/lib/chain/lightClient/index.d.ts +2 -2
  129. package/lib/chain/lightClient/index.d.ts.map +1 -1
  130. package/lib/chain/lightClient/index.js +11 -4
  131. package/lib/chain/lightClient/index.js.map +1 -1
  132. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +6 -6
  133. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  134. package/lib/chain/opPools/aggregatedAttestationPool.js +13 -13
  135. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  136. package/lib/chain/opPools/executionPayloadBidPool.d.ts +2 -2
  137. package/lib/chain/opPools/executionPayloadBidPool.d.ts.map +1 -1
  138. package/lib/chain/opPools/executionPayloadBidPool.js +2 -2
  139. package/lib/chain/opPools/executionPayloadBidPool.js.map +1 -1
  140. package/lib/chain/opPools/opPool.d.ts +3 -3
  141. package/lib/chain/opPools/opPool.d.ts.map +1 -1
  142. package/lib/chain/opPools/opPool.js +7 -7
  143. package/lib/chain/opPools/opPool.js.map +1 -1
  144. package/lib/chain/opPools/utils.d.ts +2 -2
  145. package/lib/chain/opPools/utils.d.ts.map +1 -1
  146. package/lib/chain/opPools/utils.js +1 -1
  147. package/lib/chain/opPools/utils.js.map +1 -1
  148. package/lib/chain/options.d.ts +1 -0
  149. package/lib/chain/options.d.ts.map +1 -1
  150. package/lib/chain/options.js +1 -0
  151. package/lib/chain/options.js.map +1 -1
  152. package/lib/chain/prepareNextSlot.d.ts +2 -2
  153. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  154. package/lib/chain/prepareNextSlot.js +10 -4
  155. package/lib/chain/prepareNextSlot.js.map +1 -1
  156. package/lib/chain/produceBlock/computeNewStateRoot.d.ts +4 -4
  157. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
  158. package/lib/chain/produceBlock/computeNewStateRoot.js +3 -4
  159. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  160. package/lib/chain/produceBlock/produceBlockBody.d.ts +5 -5
  161. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  162. package/lib/chain/produceBlock/produceBlockBody.js +32 -17
  163. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  164. package/lib/chain/regen/interface.d.ts +13 -13
  165. package/lib/chain/regen/interface.d.ts.map +1 -1
  166. package/lib/chain/regen/queued.d.ts +14 -14
  167. package/lib/chain/regen/queued.d.ts.map +1 -1
  168. package/lib/chain/regen/queued.js.map +1 -1
  169. package/lib/chain/regen/regen.d.ts +6 -5
  170. package/lib/chain/regen/regen.d.ts.map +1 -1
  171. package/lib/chain/regen/regen.js +6 -6
  172. package/lib/chain/regen/regen.js.map +1 -1
  173. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +1 -1
  174. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
  175. package/lib/chain/seenCache/seenGossipBlockInput.js +2 -2
  176. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  177. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +1 -1
  178. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -1
  179. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +2 -2
  180. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -1
  181. package/lib/chain/serializeState.d.ts +2 -2
  182. package/lib/chain/serializeState.d.ts.map +1 -1
  183. package/lib/chain/serializeState.js +1 -1
  184. package/lib/chain/serializeState.js.map +1 -1
  185. package/lib/chain/shufflingCache.d.ts +2 -2
  186. package/lib/chain/shufflingCache.d.ts.map +1 -1
  187. package/lib/chain/shufflingCache.js +3 -4
  188. package/lib/chain/shufflingCache.js.map +1 -1
  189. package/lib/chain/stateCache/fifoBlockStateCache.d.ts +6 -6
  190. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -1
  191. package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
  192. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +11 -11
  193. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  194. package/lib/chain/stateCache/persistentCheckpointsCache.js +12 -16
  195. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  196. package/lib/chain/stateCache/types.d.ts +14 -14
  197. package/lib/chain/stateCache/types.d.ts.map +1 -1
  198. package/lib/chain/stateCache/types.js.map +1 -1
  199. package/lib/chain/validation/attesterSlashing.js +3 -3
  200. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  201. package/lib/chain/validation/blobSidecar.js +1 -1
  202. package/lib/chain/validation/blobSidecar.js.map +1 -1
  203. package/lib/chain/validation/block.d.ts.map +1 -1
  204. package/lib/chain/validation/block.js +3 -3
  205. package/lib/chain/validation/block.js.map +1 -1
  206. package/lib/chain/validation/blsToExecutionChange.js +2 -2
  207. package/lib/chain/validation/blsToExecutionChange.js.map +1 -1
  208. package/lib/chain/validation/dataColumnSidecar.d.ts +11 -4
  209. package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
  210. package/lib/chain/validation/dataColumnSidecar.js +185 -6
  211. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  212. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  213. package/lib/chain/validation/executionPayloadBid.js +10 -7
  214. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  215. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
  216. package/lib/chain/validation/executionPayloadEnvelope.js +7 -3
  217. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  218. package/lib/chain/validation/payloadAttestationMessage.js +5 -3
  219. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
  220. package/lib/chain/validation/proposerSlashing.js +1 -1
  221. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  222. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts +2 -2
  223. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -1
  224. package/lib/chain/validation/signatureSets/contributionAndProof.js +1 -1
  225. package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
  226. package/lib/chain/validation/signatureSets/syncCommittee.d.ts +2 -2
  227. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -1
  228. package/lib/chain/validation/signatureSets/syncCommittee.js +1 -1
  229. package/lib/chain/validation/signatureSets/syncCommittee.js.map +1 -1
  230. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts +2 -2
  231. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -1
  232. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js.map +1 -1
  233. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts +2 -2
  234. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -1
  235. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js +1 -1
  236. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js.map +1 -1
  237. package/lib/chain/validation/syncCommittee.d.ts +3 -3
  238. package/lib/chain/validation/syncCommittee.d.ts.map +1 -1
  239. package/lib/chain/validation/syncCommittee.js +5 -1
  240. package/lib/chain/validation/syncCommittee.js.map +1 -1
  241. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
  242. package/lib/chain/validation/syncCommitteeContributionAndProof.js +5 -2
  243. package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
  244. package/lib/chain/validation/voluntaryExit.d.ts.map +1 -1
  245. package/lib/chain/validation/voluntaryExit.js +3 -3
  246. package/lib/chain/validation/voluntaryExit.js.map +1 -1
  247. package/lib/chain/validatorMonitor.d.ts +3 -3
  248. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  249. package/lib/chain/validatorMonitor.js +11 -9
  250. package/lib/chain/validatorMonitor.js.map +1 -1
  251. package/lib/db/buckets.d.ts +2 -2
  252. package/lib/db/buckets.d.ts.map +1 -1
  253. package/lib/db/buckets.js +2 -2
  254. package/lib/db/buckets.js.map +1 -1
  255. package/lib/db/repositories/blockArchiveIndex.d.ts +2 -2
  256. package/lib/db/repositories/blockArchiveIndex.d.ts.map +1 -1
  257. package/lib/db/repositories/dataColumnSidecar.d.ts.map +1 -1
  258. package/lib/db/repositories/dataColumnSidecar.js +4 -2
  259. package/lib/db/repositories/dataColumnSidecar.js.map +1 -1
  260. package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +1 -1
  261. package/lib/db/repositories/dataColumnSidecarArchive.js +4 -2
  262. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
  263. package/lib/metrics/metrics/lodestar.d.ts +32 -4
  264. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  265. package/lib/metrics/metrics/lodestar.js +52 -15
  266. package/lib/metrics/metrics/lodestar.js.map +1 -1
  267. package/lib/network/gossip/topic.d.ts +2 -729
  268. package/lib/network/gossip/topic.d.ts.map +1 -1
  269. package/lib/network/interface.d.ts +7 -4
  270. package/lib/network/interface.d.ts.map +1 -1
  271. package/lib/network/libp2p/index.d.ts.map +1 -1
  272. package/lib/network/libp2p/index.js +22 -11
  273. package/lib/network/libp2p/index.js.map +1 -1
  274. package/lib/network/network.d.ts +7 -4
  275. package/lib/network/network.d.ts.map +1 -1
  276. package/lib/network/network.js +12 -3
  277. package/lib/network/network.js.map +1 -1
  278. package/lib/network/options.d.ts.map +1 -1
  279. package/lib/network/options.js +7 -2
  280. package/lib/network/options.js.map +1 -1
  281. package/lib/network/processor/extractSlotRootFns.d.ts +1 -1
  282. package/lib/network/processor/extractSlotRootFns.d.ts.map +1 -1
  283. package/lib/network/processor/extractSlotRootFns.js +25 -5
  284. package/lib/network/processor/extractSlotRootFns.js.map +1 -1
  285. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  286. package/lib/network/processor/gossipHandlers.js +262 -75
  287. package/lib/network/processor/gossipHandlers.js.map +1 -1
  288. package/lib/network/processor/index.d.ts +22 -7
  289. package/lib/network/processor/index.d.ts.map +1 -1
  290. package/lib/network/processor/index.js +313 -80
  291. package/lib/network/processor/index.js.map +1 -1
  292. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -1
  293. package/lib/network/reqresp/ReqRespBeaconNode.js +9 -0
  294. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  295. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts +8 -0
  296. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts.map +1 -0
  297. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js +69 -0
  298. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js.map +1 -0
  299. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.d.ts +6 -0
  300. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.d.ts.map +1 -0
  301. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js +28 -0
  302. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js.map +1 -0
  303. package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
  304. package/lib/network/reqresp/handlers/index.js +11 -1
  305. package/lib/network/reqresp/handlers/index.js.map +1 -1
  306. package/lib/network/reqresp/protocols.d.ts +2 -0
  307. package/lib/network/reqresp/protocols.d.ts.map +1 -1
  308. package/lib/network/reqresp/protocols.js +10 -0
  309. package/lib/network/reqresp/protocols.js.map +1 -1
  310. package/lib/network/reqresp/rateLimit.d.ts.map +1 -1
  311. package/lib/network/reqresp/rateLimit.js +8 -0
  312. package/lib/network/reqresp/rateLimit.js.map +1 -1
  313. package/lib/network/reqresp/score.d.ts.map +1 -1
  314. package/lib/network/reqresp/score.js +2 -0
  315. package/lib/network/reqresp/score.js.map +1 -1
  316. package/lib/network/reqresp/types.d.ts +10 -4
  317. package/lib/network/reqresp/types.d.ts.map +1 -1
  318. package/lib/network/reqresp/types.js +16 -4
  319. package/lib/network/reqresp/types.js.map +1 -1
  320. package/lib/node/nodejs.d.ts +2 -2
  321. package/lib/node/nodejs.d.ts.map +1 -1
  322. package/lib/node/nodejs.js +3 -3
  323. package/lib/node/nodejs.js.map +1 -1
  324. package/lib/node/notifier.d.ts.map +1 -1
  325. package/lib/node/notifier.js +3 -3
  326. package/lib/node/notifier.js.map +1 -1
  327. package/lib/sync/backfill/backfill.d.ts +2 -2
  328. package/lib/sync/backfill/backfill.d.ts.map +1 -1
  329. package/lib/sync/backfill/backfill.js +2 -2
  330. package/lib/sync/backfill/backfill.js.map +1 -1
  331. package/lib/sync/unknownBlock.d.ts +1 -1
  332. package/lib/sync/unknownBlock.js +3 -3
  333. package/lib/sync/unknownBlock.js.map +1 -1
  334. package/lib/sync/utils/downloadByRange.d.ts +3 -3
  335. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  336. package/lib/sync/utils/downloadByRange.js +4 -2
  337. package/lib/sync/utils/downloadByRange.js.map +1 -1
  338. package/lib/sync/utils/downloadByRoot.d.ts +3 -3
  339. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  340. package/lib/sync/utils/downloadByRoot.js +10 -5
  341. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  342. package/lib/util/blobs.d.ts +3 -3
  343. package/lib/util/blobs.d.ts.map +1 -1
  344. package/lib/util/blobs.js +21 -10
  345. package/lib/util/blobs.js.map +1 -1
  346. package/lib/util/dataColumns.d.ts +18 -11
  347. package/lib/util/dataColumns.d.ts.map +1 -1
  348. package/lib/util/dataColumns.js +51 -17
  349. package/lib/util/dataColumns.js.map +1 -1
  350. package/lib/util/execution.d.ts +6 -2
  351. package/lib/util/execution.d.ts.map +1 -1
  352. package/lib/util/execution.js +49 -25
  353. package/lib/util/execution.js.map +1 -1
  354. package/lib/util/sszBytes.d.ts +25 -1
  355. package/lib/util/sszBytes.d.ts.map +1 -1
  356. package/lib/util/sszBytes.js +189 -2
  357. package/lib/util/sszBytes.js.map +1 -1
  358. package/lib/util/types.d.ts +2 -0
  359. package/lib/util/types.d.ts.map +1 -1
  360. package/lib/util/types.js +1 -0
  361. package/lib/util/types.js.map +1 -1
  362. package/package.json +16 -16
  363. package/src/api/impl/beacon/blocks/index.ts +33 -16
  364. package/src/api/impl/beacon/pool/index.ts +5 -1
  365. package/src/api/impl/beacon/state/index.ts +43 -55
  366. package/src/api/impl/beacon/state/utils.ts +11 -25
  367. package/src/api/impl/debug/index.ts +2 -2
  368. package/src/api/impl/lodestar/index.ts +8 -8
  369. package/src/api/impl/proof/index.ts +2 -9
  370. package/src/api/impl/validator/index.ts +36 -41
  371. package/src/api/impl/validator/utils.ts +4 -7
  372. package/src/chain/ColumnReconstructionTracker.ts +6 -5
  373. package/src/chain/GetBlobsTracker.ts +14 -12
  374. package/src/chain/archiveStore/archiveStore.ts +1 -0
  375. package/src/chain/archiveStore/historicalState/getHistoricalState.ts +10 -39
  376. package/src/chain/archiveStore/historicalState/historicalStateRegen.ts +2 -1
  377. package/src/chain/archiveStore/historicalState/types.ts +2 -0
  378. package/src/chain/archiveStore/historicalState/worker.ts +1 -4
  379. package/src/chain/archiveStore/interface.ts +1 -0
  380. package/src/chain/balancesCache.ts +5 -11
  381. package/src/chain/blocks/blockInput/blockInput.ts +8 -8
  382. package/src/chain/blocks/blockInput/types.ts +5 -4
  383. package/src/chain/blocks/importBlock.ts +50 -31
  384. package/src/chain/blocks/importExecutionPayload.ts +98 -62
  385. package/src/chain/blocks/index.ts +3 -2
  386. package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +53 -12
  387. package/src/chain/blocks/payloadEnvelopeInput/types.ts +2 -1
  388. package/src/chain/blocks/types.ts +26 -15
  389. package/src/chain/blocks/utils/checkpoint.ts +2 -2
  390. package/src/chain/blocks/verifyBlock.ts +5 -10
  391. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +10 -14
  392. package/src/chain/blocks/verifyBlocksSignatures.ts +10 -3
  393. package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +6 -8
  394. package/src/chain/chain.ts +148 -95
  395. package/src/chain/emitter.ts +27 -9
  396. package/src/chain/errors/blockError.ts +4 -4
  397. package/src/chain/errors/dataColumnSidecarError.ts +32 -1
  398. package/src/chain/forkChoice/index.ts +35 -41
  399. package/src/chain/initState.ts +7 -2
  400. package/src/chain/interface.ts +16 -15
  401. package/src/chain/lightClient/index.ts +17 -18
  402. package/src/chain/opPools/aggregatedAttestationPool.ts +20 -21
  403. package/src/chain/opPools/executionPayloadBidPool.ts +3 -3
  404. package/src/chain/opPools/opPool.ts +13 -14
  405. package/src/chain/opPools/utils.ts +3 -3
  406. package/src/chain/options.ts +2 -0
  407. package/src/chain/prepareNextSlot.ts +14 -8
  408. package/src/chain/produceBlock/computeNewStateRoot.ts +7 -10
  409. package/src/chain/produceBlock/produceBlockBody.ts +49 -46
  410. package/src/chain/regen/interface.ts +13 -17
  411. package/src/chain/regen/queued.ts +16 -20
  412. package/src/chain/regen/regen.ts +16 -17
  413. package/src/chain/seenCache/seenGossipBlockInput.ts +2 -2
  414. package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +2 -2
  415. package/src/chain/serializeState.ts +3 -3
  416. package/src/chain/shufflingCache.ts +5 -7
  417. package/src/chain/stateCache/fifoBlockStateCache.ts +7 -7
  418. package/src/chain/stateCache/persistentCheckpointsCache.ts +27 -42
  419. package/src/chain/stateCache/types.ts +14 -18
  420. package/src/chain/validation/attesterSlashing.ts +3 -3
  421. package/src/chain/validation/blobSidecar.ts +1 -1
  422. package/src/chain/validation/block.ts +3 -4
  423. package/src/chain/validation/blsToExecutionChange.ts +2 -2
  424. package/src/chain/validation/dataColumnSidecar.ts +231 -8
  425. package/src/chain/validation/executionPayloadBid.ts +10 -10
  426. package/src/chain/validation/executionPayloadEnvelope.ts +7 -4
  427. package/src/chain/validation/payloadAttestationMessage.ts +6 -4
  428. package/src/chain/validation/proposerSlashing.ts +1 -1
  429. package/src/chain/validation/signatureSets/contributionAndProof.ts +2 -7
  430. package/src/chain/validation/signatureSets/syncCommittee.ts +2 -7
  431. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +2 -2
  432. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +2 -7
  433. package/src/chain/validation/syncCommittee.ts +10 -6
  434. package/src/chain/validation/syncCommitteeContributionAndProof.ts +9 -10
  435. package/src/chain/validation/voluntaryExit.ts +3 -8
  436. package/src/chain/validatorMonitor.ts +15 -13
  437. package/src/db/buckets.ts +2 -2
  438. package/src/db/repositories/dataColumnSidecar.ts +4 -2
  439. package/src/db/repositories/dataColumnSidecarArchive.ts +4 -2
  440. package/src/metrics/metrics/lodestar.ts +57 -19
  441. package/src/network/interface.ts +18 -4
  442. package/src/network/libp2p/index.ts +24 -13
  443. package/src/network/network.ts +39 -8
  444. package/src/network/options.ts +7 -2
  445. package/src/network/processor/extractSlotRootFns.ts +32 -6
  446. package/src/network/processor/gossipHandlers.ts +327 -88
  447. package/src/network/processor/index.ts +395 -92
  448. package/src/network/reqresp/ReqRespBeaconNode.ts +13 -0
  449. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRange.ts +94 -0
  450. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRoot.ts +43 -0
  451. package/src/network/reqresp/handlers/index.ts +12 -0
  452. package/src/network/reqresp/protocols.ts +12 -0
  453. package/src/network/reqresp/rateLimit.ts +18 -0
  454. package/src/network/reqresp/score.ts +2 -0
  455. package/src/network/reqresp/types.ts +26 -5
  456. package/src/node/nodejs.ts +6 -5
  457. package/src/node/notifier.ts +5 -6
  458. package/src/sync/backfill/backfill.ts +3 -3
  459. package/src/sync/unknownBlock.ts +4 -4
  460. package/src/sync/utils/downloadByRange.ts +9 -7
  461. package/src/sync/utils/downloadByRoot.ts +16 -12
  462. package/src/util/blobs.ts +35 -15
  463. package/src/util/dataColumns.ts +69 -25
  464. package/src/util/execution.ts +49 -30
  465. package/src/util/sszBytes.ts +245 -3
  466. package/src/util/types.ts +6 -0
package/src/util/blobs.ts CHANGED
@@ -13,7 +13,17 @@ import {
13
13
  VERSIONED_HASH_VERSION_KZG,
14
14
  } from "@lodestar/params";
15
15
  import {signedBlockToSignedHeader} from "@lodestar/state-transition";
16
- import {BeaconBlockBody, DataColumnSidecars, SSZTypesFor, SignedBeaconBlock, deneb, fulu, ssz} from "@lodestar/types";
16
+ import {
17
+ BeaconBlockBody,
18
+ DataColumnSidecar,
19
+ SSZTypesFor,
20
+ SignedBeaconBlock,
21
+ deneb,
22
+ fulu,
23
+ gloas,
24
+ isGloasDataColumnSidecar,
25
+ ssz,
26
+ } from "@lodestar/types";
17
27
  import {kzg} from "./kzg.js";
18
28
 
19
29
  type VersionHash = Uint8Array;
@@ -71,8 +81,8 @@ export function getBlobSidecars(
71
81
  * See https://github.com/ethereum/consensus-specs/blob/v1.6.0-alpha.4/specs/fulu/das-core.md#recover_matrix
72
82
  */
73
83
  export async function dataColumnMatrixRecovery(
74
- partialSidecars: Map<number, fulu.DataColumnSidecar>
75
- ): Promise<fulu.DataColumnSidecars | null> {
84
+ partialSidecars: Map<number, DataColumnSidecar>
85
+ ): Promise<DataColumnSidecar[] | null> {
76
86
  const columnCount = partialSidecars.size;
77
87
  if (columnCount < NUMBER_OF_COLUMNS / 2) {
78
88
  // We don't have enough columns to recover
@@ -92,7 +102,7 @@ export async function dataColumnMatrixRecovery(
92
102
  // should not happen because we check the size of the cache before this
93
103
  throw new Error("No data column found in cache to recover from");
94
104
  }
95
- const blobCount = firstDataColumn.kzgCommitments.length;
105
+ const blobCount = firstDataColumn.column.length;
96
106
 
97
107
  const fullColumns: Array<Uint8Array[]> = Array.from(
98
108
  {length: NUMBER_OF_COLUMNS},
@@ -121,7 +131,7 @@ export async function dataColumnMatrixRecovery(
121
131
  }
122
132
  }
123
133
 
124
- const result: fulu.DataColumnSidecars = new Array(NUMBER_OF_COLUMNS);
134
+ const result: DataColumnSidecar[] = new Array(NUMBER_OF_COLUMNS);
125
135
 
126
136
  for (let columnIndex = 0; columnIndex < NUMBER_OF_COLUMNS; columnIndex++) {
127
137
  let sidecar = partialSidecars.get(columnIndex);
@@ -131,14 +141,24 @@ export async function dataColumnMatrixRecovery(
131
141
  continue;
132
142
  }
133
143
 
134
- sidecar = {
135
- index: columnIndex,
136
- column: fullColumns[columnIndex],
137
- kzgCommitments: firstDataColumn.kzgCommitments,
138
- kzgProofs: Array.from({length: blobCount}, (_, rowIndex) => blobProofs[rowIndex][columnIndex]),
139
- signedBlockHeader: firstDataColumn.signedBlockHeader,
140
- kzgCommitmentsInclusionProof: firstDataColumn.kzgCommitmentsInclusionProof,
141
- };
144
+ if (isGloasDataColumnSidecar(firstDataColumn)) {
145
+ sidecar = {
146
+ index: columnIndex,
147
+ column: fullColumns[columnIndex],
148
+ kzgProofs: Array.from({length: blobCount}, (_, rowIndex) => blobProofs[rowIndex][columnIndex]),
149
+ slot: firstDataColumn.slot,
150
+ beaconBlockRoot: firstDataColumn.beaconBlockRoot,
151
+ } satisfies gloas.DataColumnSidecar;
152
+ } else {
153
+ sidecar = {
154
+ index: columnIndex,
155
+ column: fullColumns[columnIndex],
156
+ kzgCommitments: firstDataColumn.kzgCommitments,
157
+ kzgProofs: Array.from({length: blobCount}, (_, rowIndex) => blobProofs[rowIndex][columnIndex]),
158
+ signedBlockHeader: firstDataColumn.signedBlockHeader,
159
+ kzgCommitmentsInclusionProof: firstDataColumn.kzgCommitmentsInclusionProof,
160
+ } satisfies fulu.DataColumnSidecar;
161
+ }
142
162
  result[columnIndex] = sidecar;
143
163
  }
144
164
 
@@ -149,7 +169,7 @@ export async function dataColumnMatrixRecovery(
149
169
  * Reconstruct blobs from a set of data columns, at least 50%+ of all the columns
150
170
  * must be provided to allow to reconstruct the full data matrix
151
171
  */
152
- export async function reconstructBlobs(sidecars: DataColumnSidecars, indices?: number[]): Promise<deneb.Blobs> {
172
+ export async function reconstructBlobs(sidecars: DataColumnSidecar[], indices?: number[]): Promise<deneb.Blobs> {
153
173
  if (sidecars.length < NUMBER_OF_COLUMNS / 2) {
154
174
  throw Error(
155
175
  `Expected at least ${NUMBER_OF_COLUMNS / 2} data columns to reconstruct blobs, received ${sidecars.length}`
@@ -188,7 +208,7 @@ export async function reconstructBlobs(sidecars: DataColumnSidecars, indices?: n
188
208
  * Recover cells for specific blob indices from a set of data columns
189
209
  */
190
210
  async function recoverBlobCells(
191
- partialSidecars: DataColumnSidecars,
211
+ partialSidecars: DataColumnSidecar[],
192
212
  blobIndices: number[]
193
213
  ): Promise<Map<number, fulu.Cell[]> | null> {
194
214
  const columnCount = partialSidecars.length;
@@ -16,6 +16,7 @@ import {
16
16
  BeaconBlockBody,
17
17
  ColumnIndex,
18
18
  CustodyIndex,
19
+ DataColumnSidecar,
19
20
  Root,
20
21
  SSZTypesFor,
21
22
  SignedBeaconBlock,
@@ -24,11 +25,13 @@ import {
24
25
  deneb,
25
26
  fulu,
26
27
  gloas,
28
+ isGloasDataColumnSidecar,
27
29
  ssz,
28
30
  } from "@lodestar/types";
29
31
  import {bytesToBigInt} from "@lodestar/utils";
30
32
  import {BlockInputColumns} from "../chain/blocks/blockInput/blockInput.js";
31
33
  import {BlockInputSource} from "../chain/blocks/blockInput/types.js";
34
+ import {PayloadEnvelopeInput, PayloadEnvelopeInputSource} from "../chain/blocks/payloadEnvelopeInput/index.js";
32
35
  import {ChainEvent, ChainEventEmitter} from "../chain/emitter.js";
33
36
  import {Metrics} from "../metrics/metrics.js";
34
37
  import {NodeId} from "../network/subnets/index.js";
@@ -287,17 +290,17 @@ export function getBlobKzgCommitments(
287
290
  * SPEC FUNCTION
288
291
  * https://github.com/ethereum/consensus-specs/blob/v1.6.0-alpha.4/specs/fulu/validator.md#get_data_column_sidecars
289
292
  */
290
- export function getDataColumnSidecars(
293
+ export function getFuluDataColumnSidecars(
291
294
  signedBlockHeader: SignedBeaconBlockHeader,
292
295
  kzgCommitments: deneb.KZGCommitment[],
293
296
  kzgCommitmentsInclusionProof: fulu.KzgCommitmentsInclusionProof,
294
297
  cellsAndKzgProofs: {cells: Uint8Array[]; proofs: Uint8Array[]}[]
295
- ): fulu.DataColumnSidecars {
298
+ ): fulu.DataColumnSidecar[] {
296
299
  if (cellsAndKzgProofs.length !== kzgCommitments.length) {
297
300
  throw Error("Invalid cellsAndKzgProofs length for getDataColumnSidecars");
298
301
  }
299
302
 
300
- const sidecars: fulu.DataColumnSidecars = [];
303
+ const sidecars: fulu.DataColumnSidecar[] = [];
301
304
  for (let columnIndex = 0; columnIndex < NUMBER_OF_COLUMNS; columnIndex++) {
302
305
  const columnCells = [];
303
306
  const columnProofs = [];
@@ -322,13 +325,14 @@ export function getDataColumnSidecars(
322
325
  * block, assemble the sidecars which can be distributed to peers.
323
326
  *
324
327
  * SPEC FUNCTION
325
- * https://github.com/ethereum/consensus-specs/blob/v1.6.0-alpha.4/specs/fulu/validator.md#get_data_column_sidecars_from_block
328
+ * fulu: https://github.com/ethereum/consensus-specs/blob/v1.6.0-alpha.4/specs/fulu/validator.md#get_data_column_sidecars_from_block
329
+ * gloas: https://github.com/ethereum/consensus-specs/blob/v1.7.0-alpha.3/specs/gloas/builder.md#modified-get_data_column_sidecars_from_block
326
330
  */
327
331
  export function getDataColumnSidecarsFromBlock(
328
332
  config: ChainForkConfig,
329
333
  signedBlock: SignedBeaconBlock<ForkPostFulu>,
330
334
  cellsAndKzgProofs: {cells: Uint8Array[]; proofs: Uint8Array[]}[]
331
- ): fulu.DataColumnSidecars {
335
+ ): DataColumnSidecar[] {
332
336
  const fork = config.getForkName(signedBlock.message.slot);
333
337
  const blobKzgCommitments = getBlobKzgCommitments(fork, signedBlock);
334
338
 
@@ -336,11 +340,21 @@ export function getDataColumnSidecarsFromBlock(
336
340
  if (blobKzgCommitments.length === 0) {
337
341
  return [];
338
342
  }
339
- const signedBlockHeader = signedBlockToSignedHeader(config, signedBlock);
340
343
 
344
+ if (isForkPostGloas(fork)) {
345
+ const beaconBlockRoot = config.getForkTypes(signedBlock.message.slot).BeaconBlock.hashTreeRoot(signedBlock.message);
346
+ return getGloasDataColumnSidecars(signedBlock.message.slot, beaconBlockRoot, cellsAndKzgProofs);
347
+ }
348
+
349
+ const signedBlockHeader = signedBlockToSignedHeader(config, signedBlock);
341
350
  const kzgCommitmentsInclusionProof = computePostFuluKzgCommitmentsInclusionProof(fork, signedBlock.message.body);
342
351
 
343
- return getDataColumnSidecars(signedBlockHeader, blobKzgCommitments, kzgCommitmentsInclusionProof, cellsAndKzgProofs);
352
+ return getFuluDataColumnSidecars(
353
+ signedBlockHeader,
354
+ blobKzgCommitments,
355
+ kzgCommitmentsInclusionProof,
356
+ cellsAndKzgProofs
357
+ );
344
358
  }
345
359
 
346
360
  /**
@@ -348,13 +362,18 @@ export function getDataColumnSidecarsFromBlock(
348
362
  * to the commitments it contains, assemble all sidecars for distribution to peers.
349
363
  *
350
364
  * SPEC FUNCTION
351
- * https://github.com/ethereum/consensus-specs/blob/v1.6.0-alpha.4/specs/fulu/validator.md#get_data_column_sidecars_from_column_sidecar
365
+ * fulu: https://github.com/ethereum/consensus-specs/blob/v1.6.0-alpha.4/specs/fulu/validator.md#get_data_column_sidecars_from_column_sidecar
366
+ * gloas: https://github.com/ethereum/consensus-specs/blob/v1.7.0-alpha.3/specs/gloas/validator.md#modified-get_data_column_sidecars_from_column_sidecar
352
367
  */
353
368
  export function getDataColumnSidecarsFromColumnSidecar(
354
- sidecar: fulu.DataColumnSidecar,
369
+ sidecar: DataColumnSidecar,
355
370
  cellsAndKzgProofs: {cells: Uint8Array[]; proofs: Uint8Array[]}[]
356
- ): fulu.DataColumnSidecars {
357
- return getDataColumnSidecars(
371
+ ): DataColumnSidecar[] {
372
+ if (isGloasDataColumnSidecar(sidecar)) {
373
+ return getGloasDataColumnSidecars(sidecar.slot, sidecar.beaconBlockRoot, cellsAndKzgProofs);
374
+ }
375
+
376
+ return getFuluDataColumnSidecars(
358
377
  sidecar.signedBlockHeader,
359
378
  sidecar.kzgCommitments,
360
379
  sidecar.kzgCommitmentsInclusionProof,
@@ -362,21 +381,32 @@ export function getDataColumnSidecarsFromColumnSidecar(
362
381
  );
363
382
  }
364
383
 
384
+ export function getDataColumnSidecarSlot(sidecar: DataColumnSidecar): Slot {
385
+ if (isGloasDataColumnSidecar(sidecar)) {
386
+ return sidecar.slot;
387
+ }
388
+
389
+ return sidecar.signedBlockHeader.message.slot;
390
+ }
391
+
365
392
  /**
366
393
  * In Gloas, data column sidecars have a simplified structure with `slot` and `beaconBlockRoot`
367
394
  * instead of `signedBlockHeader`, `kzgCommitments`, and `kzgCommitmentsInclusionProof`.
395
+ *
396
+ * SPEC FUNCTION
397
+ * https://github.com/ethereum/consensus-specs/blob/v1.7.0-alpha.3/specs/gloas/builder.md#modified-get_data_column_sidecars
368
398
  */
369
- export function getDataColumnSidecarsForGloas(
399
+ export function getGloasDataColumnSidecars(
370
400
  slot: Slot,
371
401
  beaconBlockRoot: Root,
372
402
  cellsAndKzgProofs: {cells: Uint8Array[]; proofs: Uint8Array[]}[]
373
- ): gloas.DataColumnSidecars {
403
+ ): gloas.DataColumnSidecar[] {
374
404
  // No need to create data column sidecars if there are no blobs
375
405
  if (cellsAndKzgProofs.length === 0) {
376
406
  return [];
377
407
  }
378
408
 
379
- const sidecars: gloas.DataColumnSidecars = [];
409
+ const sidecars: gloas.DataColumnSidecar[] = [];
380
410
  for (let columnIndex = 0; columnIndex < NUMBER_OF_COLUMNS; columnIndex++) {
381
411
  const column: Uint8Array[] = [];
382
412
  const kzgProofs: Uint8Array[] = [];
@@ -399,11 +429,11 @@ export function getDataColumnSidecarsForGloas(
399
429
  * If we receive more than half of NUMBER_OF_COLUMNS (64) we should recover all remaining columns
400
430
  */
401
431
  export async function recoverDataColumnSidecars(
402
- blockInput: BlockInputColumns,
432
+ input: BlockInputColumns | PayloadEnvelopeInput,
403
433
  emitter: ChainEventEmitter,
404
434
  metrics: Metrics | null
405
435
  ): Promise<DataColumnReconstructionCode> {
406
- const existingColumns = blockInput.getAllColumns();
436
+ const existingColumns = input.getAllColumns();
407
437
  const columnCount = existingColumns.length;
408
438
  if (columnCount >= NUMBER_OF_COLUMNS) {
409
439
  // We have all columns
@@ -416,7 +446,7 @@ export async function recoverDataColumnSidecars(
416
446
  }
417
447
 
418
448
  metrics?.recoverDataColumnSidecars.custodyBeforeReconstruction.set(columnCount);
419
- const partialSidecars = new Map<number, fulu.DataColumnSidecar>();
449
+ const partialSidecars = new Map<number, DataColumnSidecar>();
420
450
  for (const columnSidecar of existingColumns) {
421
451
  // the more columns we put, the slower the recover
422
452
  if (partialSidecars.size >= NUMBER_OF_COLUMNS / 2) {
@@ -434,7 +464,7 @@ export async function recoverDataColumnSidecars(
434
464
  return DataColumnReconstructionCode.NullReturned;
435
465
  }
436
466
 
437
- if (blockInput.getAllColumns().length === NUMBER_OF_COLUMNS) {
467
+ if (input.getAllColumns().length === NUMBER_OF_COLUMNS) {
438
468
  // either gossip or getBlobsV2 resolved availability while we were recovering
439
469
  metrics?.dataColumns.alreadyAdded.inc(fullSidecars.length);
440
470
  return DataColumnReconstructionCode.SuccessLate;
@@ -450,13 +480,27 @@ export async function recoverDataColumnSidecars(
450
480
  // the node MAY delete the DataColumnSidecar if it is not part of the node's custody requirement.
451
481
  const sidecarsToPublish = [];
452
482
  for (const columnSidecar of fullSidecars) {
453
- if (!blockInput.hasColumn(columnSidecar.index)) {
454
- blockInput.addColumn({
455
- blockRootHex: blockInput.blockRootHex,
456
- columnSidecar,
457
- seenTimestampSec: Date.now() / 1000,
458
- source: BlockInputSource.recovery,
459
- });
483
+ if (!input.hasColumn(columnSidecar.index)) {
484
+ if (input instanceof PayloadEnvelopeInput) {
485
+ if (!isGloasDataColumnSidecar(columnSidecar)) {
486
+ throw new Error(`Expected gloas DataColumnSidecar for block ${input.blockRootHex}`);
487
+ }
488
+ input.addColumn({
489
+ columnSidecar,
490
+ seenTimestampSec: Date.now() / 1000,
491
+ source: PayloadEnvelopeInputSource.recovery,
492
+ });
493
+ } else {
494
+ if (isGloasDataColumnSidecar(columnSidecar)) {
495
+ throw new Error(`Expected fulu DataColumnSidecar for block ${input.blockRootHex}`);
496
+ }
497
+ input.addColumn({
498
+ blockRootHex: input.blockRootHex,
499
+ columnSidecar,
500
+ seenTimestampSec: Date.now() / 1000,
501
+ source: BlockInputSource.recovery,
502
+ });
503
+ }
460
504
  sidecarsToPublish.push(columnSidecar);
461
505
  }
462
506
  }
@@ -2,10 +2,11 @@ import {routes} from "@lodestar/api";
2
2
  import {ChainForkConfig} from "@lodestar/config";
3
3
  import {ForkPostFulu, ForkPreFulu} from "@lodestar/params";
4
4
  import {signedBlockToSignedHeader} from "@lodestar/state-transition";
5
- import {deneb, fulu} from "@lodestar/types";
6
- import {toHex} from "@lodestar/utils";
5
+ import {DataColumnSidecar, SignedBeaconBlock, deneb, isGloasDataColumnSidecar} from "@lodestar/types";
6
+ import {fromHex, toHex} from "@lodestar/utils";
7
7
  import {isBlockInputBlobs, isBlockInputColumns} from "../chain/blocks/blockInput/blockInput.js";
8
8
  import {BlockInputSource, IBlockInput} from "../chain/blocks/blockInput/types.js";
9
+ import {PayloadEnvelopeInput, PayloadEnvelopeInputSource} from "../chain/blocks/payloadEnvelopeInput/index.js";
9
10
  import {ChainEvent, ChainEventEmitter} from "../chain/emitter.js";
10
11
  import {IExecutionEngine} from "../execution/index.js";
11
12
  import {Metrics} from "../metrics/index.js";
@@ -14,6 +15,7 @@ import {
14
15
  getCellsAndProofs,
15
16
  getDataColumnSidecarsFromBlock,
16
17
  getDataColumnSidecarsFromColumnSidecar,
18
+ getGloasDataColumnSidecars,
17
19
  } from "./dataColumns.js";
18
20
 
19
21
  export enum DataColumnEngineResult {
@@ -124,27 +126,32 @@ export async function getBlobSidecarsFromExecution(
124
126
  }
125
127
 
126
128
  /**
127
- * Post fulu, call getBlobsV2 from execution engine once per slot whenever we see either beacon_block or data_column_sidecar gossip message
129
+ * Call getBlobsV2 from execution engine once per slot to fetch blobs and compute data columns.
130
+ *
131
+ * Post fulu, whenever we see either beacon_block or data_column_sidecar gossip message and data isn't complete.
132
+ * Post gloas, immediately when beacon block is successfully imported and PayloadEnvelopeInput is created.
128
133
  */
129
134
  export async function getDataColumnSidecarsFromExecution(
130
135
  config: ChainForkConfig,
131
136
  executionEngine: IExecutionEngine,
132
137
  emitter: ChainEventEmitter,
133
- blockInput: IBlockInput,
138
+ input: IBlockInput | PayloadEnvelopeInput,
134
139
  metrics: Metrics | null,
135
140
  blobAndProofBuffers?: Uint8Array[]
136
141
  ): Promise<DataColumnEngineResult> {
137
- // If its not a column block input, exit
138
- if (!isBlockInputColumns(blockInput)) {
142
+ const isPayloadInput = input instanceof PayloadEnvelopeInput;
143
+
144
+ // Pre gloas, ensure it's a column block input
145
+ if (!isPayloadInput && !isBlockInputColumns(input)) {
139
146
  return DataColumnEngineResult.PreFulu;
140
147
  }
141
148
 
142
149
  // If already have all columns, exit
143
- if (blockInput.hasAllData()) {
150
+ if (input.hasAllData()) {
144
151
  return DataColumnEngineResult.NotAttemptedFull;
145
152
  }
146
153
 
147
- const versionedHashes = blockInput.getVersionedHashes();
154
+ const versionedHashes = input.getVersionedHashes();
148
155
 
149
156
  // If there are no blobs in this block, exit
150
157
  if (versionedHashes.length === 0) {
@@ -154,11 +161,7 @@ export async function getDataColumnSidecarsFromExecution(
154
161
  // Get blobs from execution engine
155
162
  metrics?.peerDas.getBlobsV2Requests.inc();
156
163
  const timer = metrics?.peerDas.getBlobsV2RequestDuration.startTimer();
157
- const blobs = await executionEngine.getBlobs(
158
- blockInput.forkName as ForkPostFulu,
159
- versionedHashes,
160
- blobAndProofBuffers
161
- );
164
+ const blobs = await executionEngine.getBlobs(input.forkName as ForkPostFulu, versionedHashes, blobAndProofBuffers);
162
165
  timer?.();
163
166
 
164
167
  // Execution engine was unable to find one or more blobs
@@ -168,22 +171,24 @@ export async function getDataColumnSidecarsFromExecution(
168
171
  metrics?.peerDas.getBlobsV2Responses.inc();
169
172
 
170
173
  // Return if we received all data columns while waiting for getBlobs
171
- if (blockInput.hasAllData()) {
174
+ if (input.hasAllData()) {
172
175
  return DataColumnEngineResult.SuccessLate;
173
176
  }
174
177
 
175
- let dataColumnSidecars: fulu.DataColumnSidecars;
178
+ let dataColumnSidecars: DataColumnSidecar[];
176
179
  const compTimer = metrics?.peerDas.dataColumnSidecarComputationTime.startTimer();
177
180
  try {
178
181
  const cellsAndProofs = await getCellsAndProofs(blobs);
179
- if (blockInput.hasBlock()) {
182
+ if (isPayloadInput) {
183
+ dataColumnSidecars = getGloasDataColumnSidecars(input.slot, fromHex(input.blockRootHex), cellsAndProofs);
184
+ } else if (input.hasBlock()) {
180
185
  dataColumnSidecars = getDataColumnSidecarsFromBlock(
181
186
  config,
182
- blockInput.getBlock() as fulu.SignedBeaconBlock,
187
+ input.getBlock() as SignedBeaconBlock<ForkPostFulu>,
183
188
  cellsAndProofs
184
189
  );
185
190
  } else {
186
- const firstSidecar = blockInput.getAllColumns()[0];
191
+ const firstSidecar = input.getAllColumns()[0];
187
192
  dataColumnSidecars = getDataColumnSidecarsFromColumnSidecar(firstSidecar, cellsAndProofs);
188
193
  }
189
194
  } finally {
@@ -191,36 +196,50 @@ export async function getDataColumnSidecarsFromExecution(
191
196
  }
192
197
 
193
198
  // Publish columns if and only if subscribed to them
194
- const previouslyMissingColumns = blockInput.getMissingSampledColumnMeta().missing;
199
+ const previouslyMissingColumns = input.getMissingSampledColumnMeta().missing;
195
200
  const sampledColumns = previouslyMissingColumns.map((columnIndex) => dataColumnSidecars[columnIndex]);
196
201
 
197
202
  // for columns that we already seen, it will be ignored through `ignoreDuplicatePublishError` gossip option
198
203
  emitter.emit(ChainEvent.publishDataColumns, sampledColumns);
199
204
  // TODO: Can we record dataColumns.sentPeersPerSubnet metric here somehow
200
205
 
201
- // add all sampled columns to the block input, even if we didn't sample them
206
+ // add all sampled columns to the input, even if we didn't sample them
202
207
  const seenTimestampSec = Date.now() / 1000;
203
208
  let alreadyAddedColumnsCount = 0;
204
209
  for (const columnSidecar of sampledColumns) {
205
- if (blockInput.hasColumn(columnSidecar.index)) {
210
+ if (input.hasColumn(columnSidecar.index)) {
206
211
  // columns may have been added while waiting
207
212
  alreadyAddedColumnsCount++;
208
213
  continue;
209
214
  }
210
215
 
211
- blockInput.addColumn({
212
- columnSidecar,
213
- blockRootHex: blockInput.blockRootHex,
214
- source: BlockInputSource.engine,
215
- seenTimestampSec,
216
- });
216
+ if (isPayloadInput) {
217
+ if (!isGloasDataColumnSidecar(columnSidecar)) {
218
+ throw new Error(`Expected gloas DataColumnSidecar for block ${input.blockRootHex}`);
219
+ }
220
+ input.addColumn({
221
+ columnSidecar,
222
+ source: PayloadEnvelopeInputSource.engine,
223
+ seenTimestampSec,
224
+ });
225
+ } else {
226
+ if (isGloasDataColumnSidecar(columnSidecar)) {
227
+ throw new Error(`Expected fulu DataColumnSidecar for block ${input.blockRootHex}`);
228
+ }
229
+ input.addColumn({
230
+ columnSidecar,
231
+ blockRootHex: input.blockRootHex,
232
+ source: BlockInputSource.engine,
233
+ seenTimestampSec,
234
+ });
235
+ }
217
236
 
218
237
  if (emitter.listenerCount(routes.events.EventType.dataColumnSidecar)) {
219
238
  emitter.emit(routes.events.EventType.dataColumnSidecar, {
220
- blockRoot: blockInput.blockRootHex,
221
- slot: blockInput.slot,
239
+ blockRoot: input.blockRootHex,
240
+ slot: input.slot,
222
241
  index: columnSidecar.index,
223
- kzgCommitments: columnSidecar.kzgCommitments.map(toHex),
242
+ kzgCommitments: !isGloasDataColumnSidecar(columnSidecar) ? columnSidecar.kzgCommitments.map(toHex) : undefined,
224
243
  });
225
244
  }
226
245
  }