@lodestar/beacon-node 1.42.0-rc.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 +12 -2
  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
@@ -8,7 +8,7 @@ import {
8
8
  ProtoBlock,
9
9
  } from "@lodestar/fork-choice";
10
10
  import {ForkSeq} from "@lodestar/params";
11
- import {IBeaconStateView, isExecutionBlockBodyType} from "@lodestar/state-transition";
11
+ import {IBeaconStateView, isExecutionBlockBodyType, isStatePostBellatrix} from "@lodestar/state-transition";
12
12
  import {bellatrix, electra} from "@lodestar/types";
13
13
  import {ErrorAborted, Logger, toRootHex} from "@lodestar/utils";
14
14
  import {ExecutionPayloadStatus, IExecutionEngine} from "../../execution/engine/interface.js";
@@ -46,8 +46,7 @@ type VerifyBlockExecutionResponse =
46
46
  | VerifyExecutionErrorResponse
47
47
  | {executionStatus: ExecutionStatus.Valid; lvhResponse: LVHValidResponse; execError: null}
48
48
  | {executionStatus: ExecutionStatus.Syncing; lvhResponse?: LVHValidResponse; execError: null}
49
- | {executionStatus: ExecutionStatus.PreMerge; lvhResponse: undefined; execError: null}
50
- | {executionStatus: ExecutionStatus.PayloadSeparated; lvhResponse: undefined; execError: null};
49
+ | {executionStatus: ExecutionStatus.PreMerge; lvhResponse: undefined; execError: null};
51
50
 
52
51
  /**
53
52
  * Verifies 1 or more execution payloads from a linear sequence of blocks.
@@ -145,13 +144,15 @@ export async function verifyBlockExecutionPayload(
145
144
  ): Promise<VerifyBlockExecutionResponse> {
146
145
  const block = blockInput.getBlock();
147
146
 
148
- // Gloas block doesn't have execution payload. Return right away
147
+ // Gloas block doesn't have execution payload. Return Syncing as a placeholder; the actual
148
+ // status for gloas PENDING/EMPTY is derived from parent's chain in importBlock.
149
149
  if (isBlockInputNoData(blockInput)) {
150
- return {executionStatus: ExecutionStatus.PayloadSeparated, lvhResponse: undefined, execError: null};
150
+ return {executionStatus: ExecutionStatus.Syncing, lvhResponse: undefined, execError: null};
151
151
  }
152
152
 
153
153
  /** Not null if execution is enabled */
154
154
  const executionPayloadEnabled =
155
+ isStatePostBellatrix(preState0) &&
155
156
  preState0.isExecutionStateType &&
156
157
  isExecutionBlockBodyType(block.message.body) &&
157
158
  preState0.isExecutionEnabled(block.message)
@@ -197,6 +198,7 @@ export async function verifyBlockExecutionPayload(
197
198
  executionStatus,
198
199
  latestValidExecHash: execResult.latestValidHash,
199
200
  invalidateFromParentBlockRoot: blockInput.parentRootHex,
201
+ invalidateFromParentBlockHash: toRootHex(executionPayloadEnabled.parentHash),
200
202
  };
201
203
  const execError = new BlockError(block, {
202
204
  code: BlockErrorCode.EXECUTION_ENGINE_ERROR,
@@ -280,6 +282,7 @@ function getSegmentErrorResponse(
280
282
  executionStatus: ExecutionStatus.Invalid,
281
283
  latestValidExecHash: lvhResponse.latestValidExecHash,
282
284
  invalidateFromParentBlockRoot: parentBlock.blockRoot,
285
+ invalidateFromParentBlockHash: parentBlock.executionPayloadBlockHash,
283
286
  };
284
287
  }
285
288
  }
@@ -7,6 +7,7 @@ import {IClock} from "../../util/clock.js";
7
7
  import {BlockError, BlockErrorCode} from "../errors/index.js";
8
8
  import {IChainOptions} from "../options.js";
9
9
  import {IBlockInput} from "./blockInput/types.js";
10
+ import {PayloadEnvelopeInput} from "./payloadEnvelopeInput/payloadEnvelopeInput.js";
10
11
  import {ImportBlockOpts} from "./types.js";
11
12
 
12
13
  /**
@@ -30,6 +31,7 @@ export function verifyBlocksSanityChecks(
30
31
  blacklistedBlocks: Map<RootHex, Slot | null>;
31
32
  },
32
33
  blocks: IBlockInput[],
34
+ payloadEnvelopes: Map<Slot, PayloadEnvelopeInput> | null,
33
35
  opts: ImportBlockOpts
34
36
  ): {
35
37
  relevantBlocks: IBlockInput[];
@@ -90,15 +92,32 @@ export function verifyBlocksSanityChecks(
90
92
  } else {
91
93
  // When importing a block segment, only the first NON-IGNORED block must be known to the fork-choice.
92
94
  const parentRoot = toRootHex(block.message.parentRoot);
93
- parentBlock = isGloasBeaconBlock(block.message)
94
- ? chain.forkChoice.getBlockHexAndBlockHash(
95
- parentRoot,
96
- toRootHex(block.message.body.signedExecutionPayloadBid.message.parentBlockHash)
97
- )
98
- : chain.forkChoice.getBlockHexDefaultStatus(parentRoot);
99
- if (!parentBlock) {
95
+ const parentBlockDefaultStatus = chain.forkChoice.getBlockHexDefaultStatus(parentRoot);
96
+ if (!parentBlockDefaultStatus) {
100
97
  throw new BlockError(block, {code: BlockErrorCode.PARENT_UNKNOWN, parentRoot});
101
98
  }
99
+
100
+ parentBlock = parentBlockDefaultStatus;
101
+ if (isGloasBeaconBlock(block.message)) {
102
+ const parentBlockHash = toRootHex(block.message.body.signedExecutionPayloadBid.message.parentBlockHash);
103
+ const parentBlockWithPayload = chain.forkChoice.getBlockHexAndBlockHash(parentRoot, parentBlockHash);
104
+ if (!parentBlockWithPayload) {
105
+ // Checkpoint sync: parent's FULL variant may not be in fork-choice yet because the
106
+ // anchor block is initialized with PENDING+EMPTY only. The parent's payload arrives
107
+ // in the same batch via payloadEnvelopes and will be imported by processBlocks. If
108
+ // a matching payload is in the Map, accept the parent as known.
109
+ const parentPayloadInput = payloadEnvelopes?.get(parentBlockDefaultStatus.slot);
110
+ if (parentPayloadInput?.getBlockHashHex() !== parentBlockHash) {
111
+ throw new BlockError(block, {
112
+ code: BlockErrorCode.PARENT_PAYLOAD_UNKNOWN,
113
+ parentRoot,
114
+ parentBlockHash,
115
+ });
116
+ }
117
+ } else {
118
+ parentBlock = parentBlockWithPayload;
119
+ }
120
+ }
102
121
  // Parent is known to the fork-choice
103
122
  parentBlockSlot = parentBlock.slot;
104
123
  }
@@ -1,5 +1,10 @@
1
1
  import {BeaconConfig} from "@lodestar/config";
2
- import {IBeaconStateView, getBlockSignatureSets} from "@lodestar/state-transition";
2
+ import {
3
+ IBeaconStateView,
4
+ SyncCommitteeCacheEmpty,
5
+ getBlockSignatureSets,
6
+ isStatePostAltair,
7
+ } from "@lodestar/state-transition";
3
8
  import {IndexedAttestation, SignedBeaconBlock} from "@lodestar/types";
4
9
  import {Logger} from "@lodestar/utils";
5
10
  import {Metrics} from "../../metrics/metrics.js";
@@ -27,7 +32,9 @@ export async function verifyBlocksSignatures(
27
32
  ): Promise<{verifySignaturesTime: number}> {
28
33
  const isValidPromises: Promise<boolean>[] = [];
29
34
  const recvToValLatency = Date.now() / 1000 - (opts.seenTimestampSec ?? Date.now() / 1000);
30
- const currentSyncCommitteeIndexed = preState0.currentSyncCommitteeIndexed;
35
+ const currentSyncCommitteeIndexed = isStatePostAltair(preState0)
36
+ ? preState0.currentSyncCommitteeIndexed
37
+ : new SyncCommitteeCacheEmpty();
31
38
 
32
39
  // Verifies signatures after running state transition, so all SyncCommittee signed roots are known at this point.
33
40
  // We must ensure block.slot <= state.slot before running getAllBlockSignatureSets().
@@ -0,0 +1,134 @@
1
+ import {BeaconConfig} from "@lodestar/config";
2
+ import {
3
+ type IBeaconStateViewGloas,
4
+ type PubkeyCache,
5
+ computeTimeAtSlot,
6
+ getExecutionPayloadEnvelopeSignatureSet,
7
+ } from "@lodestar/state-transition";
8
+ import {gloas, ssz} from "@lodestar/types";
9
+ import {byteArrayEquals, toHex, toRootHex} from "@lodestar/utils";
10
+ import {IBlsVerifier} from "../bls/index.js";
11
+
12
+ export type VerifyExecutionPayloadEnvelopeOpts = {
13
+ verifyExecutionRequestsRoot?: boolean;
14
+ };
15
+
16
+ /**
17
+ * Verify execution payload envelope fields against the post-block state.
18
+ *
19
+ * Signature verification and the execution engine call (`verify_and_notify_new_payload`) are
20
+ * performed outside this function, see `verifyExecutionPayloadEnvelopeSignature` and
21
+ * `importExecutionPayload` which run both in parallel with this check.
22
+ *
23
+ * Spec: https://github.com/ethereum/consensus-specs/blob/v1.7.0-alpha.6/specs/gloas/fork-choice.md#new-verify_execution_payload_envelope
24
+ */
25
+ export function verifyExecutionPayloadEnvelope(
26
+ config: BeaconConfig,
27
+ state: IBeaconStateViewGloas,
28
+ envelope: gloas.ExecutionPayloadEnvelope,
29
+ opts?: VerifyExecutionPayloadEnvelopeOpts
30
+ ): void {
31
+ const {verifyExecutionRequestsRoot = true} = opts ?? {};
32
+ const payload = envelope.payload;
33
+
34
+ // Verify consistency with the beacon block.
35
+ // Compute header root on a clone of latestBlockHeader to avoid mutating state.
36
+ const headerValue = ssz.phase0.BeaconBlockHeader.clone(state.latestBlockHeader);
37
+ if (byteArrayEquals(headerValue.stateRoot, ssz.Root.defaultValue())) {
38
+ headerValue.stateRoot = state.hashTreeRoot();
39
+ }
40
+ const headerRoot = ssz.phase0.BeaconBlockHeader.hashTreeRoot(headerValue);
41
+ if (!byteArrayEquals(envelope.beaconBlockRoot, headerRoot)) {
42
+ throw new Error(
43
+ `Envelope's block is not the latest block header envelope=${toRootHex(envelope.beaconBlockRoot)} latestBlockHeader=${toRootHex(headerRoot)}`
44
+ );
45
+ }
46
+ if (!byteArrayEquals(envelope.parentBeaconBlockRoot, state.latestBlockHeader.parentRoot)) {
47
+ throw new Error(
48
+ `Envelope's parent_beacon_block_root mismatch envelope=${toRootHex(envelope.parentBeaconBlockRoot)} state=${toRootHex(state.latestBlockHeader.parentRoot)}`
49
+ );
50
+ }
51
+
52
+ // Verify consistency with the committed bid
53
+ const bid = state.latestExecutionPayloadBid;
54
+ if (envelope.builderIndex !== bid.builderIndex) {
55
+ throw new Error(
56
+ `Builder index mismatch between envelope and committed bid envelope=${envelope.builderIndex} bid=${bid.builderIndex}`
57
+ );
58
+ }
59
+ if (!byteArrayEquals(bid.prevRandao, payload.prevRandao)) {
60
+ throw new Error(
61
+ `Prev randao mismatch between bid and payload bid=${toHex(bid.prevRandao)} payload=${toHex(payload.prevRandao)}`
62
+ );
63
+ }
64
+ if (Number(bid.gasLimit) !== payload.gasLimit) {
65
+ throw new Error(
66
+ `Gas limit mismatch between payload and bid payload=${payload.gasLimit} bid=${Number(bid.gasLimit)}`
67
+ );
68
+ }
69
+ if (!byteArrayEquals(bid.blockHash, payload.blockHash)) {
70
+ throw new Error(
71
+ `Block hash mismatch between payload and bid payload=${toRootHex(payload.blockHash)} bid=${toRootHex(bid.blockHash)}`
72
+ );
73
+ }
74
+ // Verify execution_requests_root matches bid commitment.
75
+ // Can be skipped if already verified during gossip validation.
76
+ if (verifyExecutionRequestsRoot) {
77
+ const requestsRoot = ssz.electra.ExecutionRequests.hashTreeRoot(envelope.executionRequests);
78
+ if (!byteArrayEquals(requestsRoot, bid.executionRequestsRoot)) {
79
+ throw new Error(
80
+ `Execution requests root mismatch envelope=${toRootHex(requestsRoot)} bid=${toRootHex(bid.executionRequestsRoot)}`
81
+ );
82
+ }
83
+ }
84
+
85
+ // Verify the execution payload is valid
86
+ if (payload.slotNumber !== state.slot) {
87
+ throw new Error(`Slot mismatch between payload and state payload=${payload.slotNumber} state=${state.slot}`);
88
+ }
89
+ if (!byteArrayEquals(payload.parentHash, state.latestBlockHash)) {
90
+ throw new Error(
91
+ `Parent hash mismatch between payload and state payload=${toRootHex(payload.parentHash)} state=${toRootHex(state.latestBlockHash)}`
92
+ );
93
+ }
94
+ const expectedTimestamp = computeTimeAtSlot(config, state.slot, state.genesisTime);
95
+ if (payload.timestamp !== expectedTimestamp) {
96
+ throw new Error(
97
+ `Timestamp mismatch between payload and state payload=${payload.timestamp} state=${expectedTimestamp}`
98
+ );
99
+ }
100
+
101
+ // Verify consistency with expected withdrawals
102
+ const payloadWithdrawalsRoot = ssz.capella.Withdrawals.hashTreeRoot(payload.withdrawals);
103
+ const expectedWithdrawalsRoot = ssz.capella.Withdrawals.hashTreeRoot(state.payloadExpectedWithdrawals);
104
+ if (!byteArrayEquals(payloadWithdrawalsRoot, expectedWithdrawalsRoot)) {
105
+ throw new Error(
106
+ `Withdrawals mismatch between payload and expected payload=${toRootHex(payloadWithdrawalsRoot)} expected=${toRootHex(expectedWithdrawalsRoot)}`
107
+ );
108
+ }
109
+
110
+ // Execution engine verification (verify_and_notify_new_payload) is done externally by the caller
111
+ }
112
+
113
+ /**
114
+ * Verify the BLS signature of an execution payload envelope.
115
+ *
116
+ * Spec: https://github.com/ethereum/consensus-specs/blob/v1.7.0-alpha.6/specs/gloas/fork-choice.md#new-verify_execution_payload_envelope_signature
117
+ */
118
+ export async function verifyExecutionPayloadEnvelopeSignature(
119
+ config: BeaconConfig,
120
+ state: IBeaconStateViewGloas,
121
+ pubkeyCache: PubkeyCache,
122
+ signedEnvelope: gloas.SignedExecutionPayloadEnvelope,
123
+ proposerIndex: number,
124
+ bls: IBlsVerifier
125
+ ): Promise<boolean> {
126
+ const signatureSet = getExecutionPayloadEnvelopeSignatureSet(
127
+ config,
128
+ pubkeyCache,
129
+ state,
130
+ signedEnvelope,
131
+ proposerIndex
132
+ );
133
+ return bls.verifySignatureSets([signatureSet]);
134
+ }
@@ -0,0 +1,41 @@
1
+ import {DataAvailabilityStatus} from "@lodestar/state-transition";
2
+ import {gloas} from "@lodestar/types";
3
+ import {PayloadEnvelopeInput} from "../seenCache/seenPayloadEnvelopeInput.js";
4
+
5
+ // we can now wait for full 12 seconds because sync and reconstruction will try pulling
6
+ // the data columns from the network anyway while the envelope is being processed
7
+ export const PAYLOAD_DATA_AVAILABILITY_TIMEOUT = 12_000;
8
+
9
+ /**
10
+ * Verifies that all payload envelope inputs have their data columns available.
11
+ * - Waits a max of PAYLOAD_DATA_AVAILABILITY_TIMEOUT for all data to be available
12
+ * - Returns the time at which all data was available
13
+ * - Returns the data availability status for each payload input
14
+ */
15
+ export async function verifyPayloadsDataAvailability(
16
+ payloadInputs: PayloadEnvelopeInput[],
17
+ signal: AbortSignal
18
+ ): Promise<{
19
+ dataAvailabilityStatuses: DataAvailabilityStatus[];
20
+ availableTime: number;
21
+ }> {
22
+ const promises: Promise<gloas.DataColumnSidecar[]>[] = [];
23
+ for (const payloadInput of payloadInputs) {
24
+ if (!payloadInput.hasAllData()) {
25
+ promises.push(payloadInput.waitForAllData(PAYLOAD_DATA_AVAILABILITY_TIMEOUT, signal));
26
+ }
27
+ }
28
+ await Promise.all(promises);
29
+
30
+ const availableTime = Math.max(0, Math.max(...payloadInputs.map((payloadInput) => payloadInput.getTimeComplete())));
31
+ const dataAvailabilityStatuses: DataAvailabilityStatus[] = payloadInputs.map((payloadInput) => {
32
+ if (payloadInput.daOutOfRange) {
33
+ return DataAvailabilityStatus.OutOfRange;
34
+ }
35
+ return payloadInput.getBlobKzgCommitments().length === 0
36
+ ? DataAvailabilityStatus.NotRequired
37
+ : DataAvailabilityStatus.Available;
38
+ });
39
+
40
+ return {dataAvailabilityStatuses, availableTime};
41
+ }
@@ -5,7 +5,7 @@ import {writeDataColumnsToDb} from "./writeBlockInputToDb.js";
5
5
  /**
6
6
  * Persists payload envelope data to DB. This operation must be eventually completed if a payload is imported.
7
7
  *
8
- * TODO GLOAS: Persist envelope metadata (stateRoot, executionRequests, builderIndex, etc.) without the full
8
+ * TODO GLOAS: Persist envelope metadata (executionRequests, builderIndex, etc.) without the full
9
9
  * execution payload body — only keep the blockHash reference. The EL already stores the payload.
10
10
  * See https://github.com/ChainSafe/lodestar/issues/5671
11
11
  */
@@ -33,23 +33,14 @@ export async function persistPayloadEnvelopeInput(
33
33
  this: BeaconChain,
34
34
  payloadInput: PayloadEnvelopeInput
35
35
  ): Promise<void> {
36
- await writePayloadEnvelopeInputToDb
37
- .call(this, payloadInput)
38
- .catch((e) => {
39
- this.logger.error(
40
- "Error persisting payload envelope in hot db",
41
- {
42
- slot: payloadInput.slot,
43
- root: payloadInput.blockRootHex,
44
- },
45
- e
46
- );
47
- })
48
- .finally(() => {
49
- this.seenPayloadEnvelopeInputCache.prune(payloadInput.blockRootHex);
50
- this.logger.debug("Pruned payload envelope input", {
36
+ await writePayloadEnvelopeInputToDb.call(this, payloadInput).catch((e) => {
37
+ this.logger.error(
38
+ "Error persisting payload envelope in hot db",
39
+ {
51
40
  slot: payloadInput.slot,
52
41
  root: payloadInput.blockRootHex,
53
- });
54
- });
42
+ },
43
+ e
44
+ );
45
+ });
55
46
  }