@lodestar/beacon-node 1.42.0-dev.5f2fffc2ce → 1.42.0-dev.687ecdc8cd

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 (439) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +36 -17
  3. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  4. package/lib/api/impl/beacon/pool/index.js +1 -1
  5. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  6. package/lib/api/impl/beacon/state/index.d.ts.map +1 -1
  7. package/lib/api/impl/beacon/state/index.js +27 -32
  8. package/lib/api/impl/beacon/state/index.js.map +1 -1
  9. package/lib/api/impl/beacon/state/utils.d.ts +4 -4
  10. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
  11. package/lib/api/impl/beacon/state/utils.js +7 -10
  12. package/lib/api/impl/beacon/state/utils.js.map +1 -1
  13. package/lib/api/impl/lodestar/index.d.ts.map +1 -1
  14. package/lib/api/impl/lodestar/index.js +4 -6
  15. package/lib/api/impl/lodestar/index.js.map +1 -1
  16. package/lib/api/impl/proof/index.d.ts.map +1 -1
  17. package/lib/api/impl/proof/index.js +2 -6
  18. package/lib/api/impl/proof/index.js.map +1 -1
  19. package/lib/api/impl/validator/index.d.ts.map +1 -1
  20. package/lib/api/impl/validator/index.js +27 -27
  21. package/lib/api/impl/validator/index.js.map +1 -1
  22. package/lib/api/impl/validator/utils.d.ts +2 -2
  23. package/lib/api/impl/validator/utils.d.ts.map +1 -1
  24. package/lib/api/impl/validator/utils.js +3 -3
  25. package/lib/api/impl/validator/utils.js.map +1 -1
  26. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  27. package/lib/chain/archiveStore/archiveStore.js +1 -0
  28. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  29. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts +3 -7
  30. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +1 -1
  31. package/lib/chain/archiveStore/historicalState/getHistoricalState.js +8 -26
  32. package/lib/chain/archiveStore/historicalState/getHistoricalState.js.map +1 -1
  33. package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts +2 -2
  34. package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts.map +1 -1
  35. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js +1 -0
  36. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js.map +1 -1
  37. package/lib/chain/archiveStore/historicalState/types.d.ts +2 -0
  38. package/lib/chain/archiveStore/historicalState/types.d.ts.map +1 -1
  39. package/lib/chain/archiveStore/historicalState/types.js.map +1 -1
  40. package/lib/chain/archiveStore/historicalState/worker.js +1 -3
  41. package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
  42. package/lib/chain/archiveStore/interface.d.ts +1 -0
  43. package/lib/chain/archiveStore/interface.d.ts.map +1 -1
  44. package/lib/chain/balancesCache.d.ts +2 -2
  45. package/lib/chain/balancesCache.d.ts.map +1 -1
  46. package/lib/chain/balancesCache.js +4 -4
  47. package/lib/chain/balancesCache.js.map +1 -1
  48. package/lib/chain/blocks/blockInput/types.d.ts +4 -3
  49. package/lib/chain/blocks/blockInput/types.d.ts.map +1 -1
  50. package/lib/chain/blocks/blockInput/types.js +1 -0
  51. package/lib/chain/blocks/blockInput/types.js.map +1 -1
  52. package/lib/chain/blocks/importBlock.d.ts +3 -3
  53. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  54. package/lib/chain/blocks/importBlock.js +39 -23
  55. package/lib/chain/blocks/importBlock.js.map +1 -1
  56. package/lib/chain/blocks/importExecutionPayload.d.ts +48 -0
  57. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -0
  58. package/lib/chain/blocks/importExecutionPayload.js +167 -0
  59. package/lib/chain/blocks/importExecutionPayload.js.map +1 -0
  60. package/lib/chain/blocks/index.d.ts.map +1 -1
  61. package/lib/chain/blocks/index.js +3 -2
  62. package/lib/chain/blocks/index.js.map +1 -1
  63. package/lib/chain/blocks/payloadEnvelopeInput/index.d.ts +3 -0
  64. package/lib/chain/blocks/payloadEnvelopeInput/index.d.ts.map +1 -0
  65. package/lib/chain/blocks/payloadEnvelopeInput/index.js +3 -0
  66. package/lib/chain/blocks/payloadEnvelopeInput/index.js.map +1 -0
  67. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +80 -0
  68. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -0
  69. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +248 -0
  70. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -0
  71. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +29 -0
  72. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -0
  73. package/lib/chain/blocks/payloadEnvelopeInput/types.js +11 -0
  74. package/lib/chain/blocks/payloadEnvelopeInput/types.js.map +1 -0
  75. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +15 -0
  76. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts.map +1 -0
  77. package/lib/chain/blocks/payloadEnvelopeProcessor.js +46 -0
  78. package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -0
  79. package/lib/chain/blocks/types.d.ts +28 -15
  80. package/lib/chain/blocks/types.d.ts.map +1 -1
  81. package/lib/chain/blocks/types.js.map +1 -1
  82. package/lib/chain/blocks/utils/checkpoint.d.ts +2 -2
  83. package/lib/chain/blocks/utils/checkpoint.d.ts.map +1 -1
  84. package/lib/chain/blocks/utils/checkpoint.js.map +1 -1
  85. package/lib/chain/blocks/verifyBlock.d.ts +2 -2
  86. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  87. package/lib/chain/blocks/verifyBlock.js +4 -4
  88. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  89. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +5 -5
  90. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  91. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +4 -4
  92. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  93. package/lib/chain/blocks/verifyBlocksSignatures.d.ts +2 -2
  94. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  95. package/lib/chain/blocks/verifyBlocksSignatures.js +1 -1
  96. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  97. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts +3 -3
  98. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +1 -1
  99. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js +3 -3
  100. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
  101. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts +12 -0
  102. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts.map +1 -0
  103. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js +40 -0
  104. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js.map +1 -0
  105. package/lib/chain/chain.d.ts +19 -14
  106. package/lib/chain/chain.d.ts.map +1 -1
  107. package/lib/chain/chain.js +75 -42
  108. package/lib/chain/chain.js.map +1 -1
  109. package/lib/chain/emitter.d.ts +2 -2
  110. package/lib/chain/emitter.d.ts.map +1 -1
  111. package/lib/chain/errors/blockError.d.ts +4 -4
  112. package/lib/chain/errors/blockError.d.ts.map +1 -1
  113. package/lib/chain/errors/executionPayloadEnvelope.d.ts +12 -2
  114. package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
  115. package/lib/chain/errors/executionPayloadEnvelope.js +3 -1
  116. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
  117. package/lib/chain/forkChoice/index.d.ts +4 -4
  118. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  119. package/lib/chain/forkChoice/index.js +27 -33
  120. package/lib/chain/forkChoice/index.js.map +1 -1
  121. package/lib/chain/initState.d.ts +2 -2
  122. package/lib/chain/initState.d.ts.map +1 -1
  123. package/lib/chain/initState.js +1 -1
  124. package/lib/chain/initState.js.map +1 -1
  125. package/lib/chain/interface.d.ts +17 -15
  126. package/lib/chain/interface.d.ts.map +1 -1
  127. package/lib/chain/lightClient/index.d.ts +2 -2
  128. package/lib/chain/lightClient/index.d.ts.map +1 -1
  129. package/lib/chain/lightClient/index.js +4 -4
  130. package/lib/chain/lightClient/index.js.map +1 -1
  131. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +6 -6
  132. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  133. package/lib/chain/opPools/aggregatedAttestationPool.js +10 -13
  134. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  135. package/lib/chain/opPools/opPool.d.ts +3 -3
  136. package/lib/chain/opPools/opPool.d.ts.map +1 -1
  137. package/lib/chain/opPools/opPool.js +7 -7
  138. package/lib/chain/opPools/opPool.js.map +1 -1
  139. package/lib/chain/opPools/utils.d.ts +2 -2
  140. package/lib/chain/opPools/utils.d.ts.map +1 -1
  141. package/lib/chain/opPools/utils.js +2 -2
  142. package/lib/chain/opPools/utils.js.map +1 -1
  143. package/lib/chain/options.d.ts +1 -0
  144. package/lib/chain/options.d.ts.map +1 -1
  145. package/lib/chain/options.js +1 -0
  146. package/lib/chain/options.js.map +1 -1
  147. package/lib/chain/prepareNextSlot.d.ts +2 -2
  148. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  149. package/lib/chain/prepareNextSlot.js +3 -3
  150. package/lib/chain/prepareNextSlot.js.map +1 -1
  151. package/lib/chain/produceBlock/computeNewStateRoot.d.ts +4 -4
  152. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
  153. package/lib/chain/produceBlock/computeNewStateRoot.js +8 -4
  154. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  155. package/lib/chain/produceBlock/produceBlockBody.d.ts +5 -5
  156. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  157. package/lib/chain/produceBlock/produceBlockBody.js +13 -17
  158. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  159. package/lib/chain/regen/interface.d.ts +15 -13
  160. package/lib/chain/regen/interface.d.ts.map +1 -1
  161. package/lib/chain/regen/interface.js +2 -0
  162. package/lib/chain/regen/interface.js.map +1 -1
  163. package/lib/chain/regen/queued.d.ts +14 -14
  164. package/lib/chain/regen/queued.d.ts.map +1 -1
  165. package/lib/chain/regen/queued.js.map +1 -1
  166. package/lib/chain/regen/regen.d.ts +6 -5
  167. package/lib/chain/regen/regen.d.ts.map +1 -1
  168. package/lib/chain/regen/regen.js +6 -6
  169. package/lib/chain/regen/regen.js.map +1 -1
  170. package/lib/chain/seenCache/index.d.ts +1 -1
  171. package/lib/chain/seenCache/index.d.ts.map +1 -1
  172. package/lib/chain/seenCache/index.js +1 -1
  173. package/lib/chain/seenCache/index.js.map +1 -1
  174. package/lib/chain/seenCache/seenGossipBlockInput.js +2 -2
  175. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  176. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +38 -0
  177. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -0
  178. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +76 -0
  179. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -0
  180. package/lib/chain/serializeState.d.ts +2 -2
  181. package/lib/chain/serializeState.d.ts.map +1 -1
  182. package/lib/chain/serializeState.js +1 -1
  183. package/lib/chain/serializeState.js.map +1 -1
  184. package/lib/chain/shufflingCache.d.ts +2 -2
  185. package/lib/chain/shufflingCache.d.ts.map +1 -1
  186. package/lib/chain/shufflingCache.js +3 -4
  187. package/lib/chain/shufflingCache.js.map +1 -1
  188. package/lib/chain/stateCache/fifoBlockStateCache.d.ts +6 -6
  189. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -1
  190. package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
  191. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +11 -11
  192. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  193. package/lib/chain/stateCache/persistentCheckpointsCache.js +12 -16
  194. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  195. package/lib/chain/stateCache/types.d.ts +14 -14
  196. package/lib/chain/stateCache/types.d.ts.map +1 -1
  197. package/lib/chain/stateCache/types.js.map +1 -1
  198. package/lib/chain/validation/attesterSlashing.js +3 -3
  199. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  200. package/lib/chain/validation/blobSidecar.js +1 -1
  201. package/lib/chain/validation/blobSidecar.js.map +1 -1
  202. package/lib/chain/validation/block.d.ts.map +1 -1
  203. package/lib/chain/validation/block.js +3 -3
  204. package/lib/chain/validation/block.js.map +1 -1
  205. package/lib/chain/validation/blsToExecutionChange.js +2 -2
  206. package/lib/chain/validation/blsToExecutionChange.js.map +1 -1
  207. package/lib/chain/validation/dataColumnSidecar.js +1 -1
  208. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  209. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  210. package/lib/chain/validation/executionPayloadBid.js +4 -4
  211. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  212. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
  213. package/lib/chain/validation/executionPayloadEnvelope.js +29 -19
  214. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  215. package/lib/chain/validation/lightClientFinalityUpdate.js +1 -1
  216. package/lib/chain/validation/lightClientFinalityUpdate.js.map +1 -1
  217. package/lib/chain/validation/lightClientOptimisticUpdate.js +1 -1
  218. package/lib/chain/validation/lightClientOptimisticUpdate.js.map +1 -1
  219. package/lib/chain/validation/payloadAttestationMessage.d.ts.map +1 -1
  220. package/lib/chain/validation/payloadAttestationMessage.js +1 -2
  221. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
  222. package/lib/chain/validation/proposerSlashing.js +1 -1
  223. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  224. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts +2 -2
  225. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -1
  226. package/lib/chain/validation/signatureSets/contributionAndProof.js +1 -1
  227. package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
  228. package/lib/chain/validation/signatureSets/syncCommittee.d.ts +2 -2
  229. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -1
  230. package/lib/chain/validation/signatureSets/syncCommittee.js +1 -1
  231. package/lib/chain/validation/signatureSets/syncCommittee.js.map +1 -1
  232. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts +2 -2
  233. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -1
  234. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js.map +1 -1
  235. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts +2 -2
  236. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -1
  237. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js +1 -1
  238. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js.map +1 -1
  239. package/lib/chain/validation/syncCommittee.d.ts +4 -4
  240. package/lib/chain/validation/syncCommittee.d.ts.map +1 -1
  241. package/lib/chain/validation/syncCommittee.js +13 -12
  242. package/lib/chain/validation/syncCommittee.js.map +1 -1
  243. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
  244. package/lib/chain/validation/syncCommitteeContributionAndProof.js +1 -1
  245. package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
  246. package/lib/chain/validation/voluntaryExit.d.ts.map +1 -1
  247. package/lib/chain/validation/voluntaryExit.js +3 -3
  248. package/lib/chain/validation/voluntaryExit.js.map +1 -1
  249. package/lib/chain/validatorMonitor.d.ts +5 -4
  250. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  251. package/lib/chain/validatorMonitor.js +13 -8
  252. package/lib/chain/validatorMonitor.js.map +1 -1
  253. package/lib/execution/engine/interface.d.ts +2 -2
  254. package/lib/metrics/metrics/lodestar.d.ts +40 -4
  255. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  256. package/lib/metrics/metrics/lodestar.js +93 -15
  257. package/lib/metrics/metrics/lodestar.js.map +1 -1
  258. package/lib/network/gossip/encoding.d.ts.map +1 -1
  259. package/lib/network/gossip/encoding.js +15 -0
  260. package/lib/network/gossip/encoding.js.map +1 -1
  261. package/lib/network/interface.d.ts +4 -2
  262. package/lib/network/interface.d.ts.map +1 -1
  263. package/lib/network/libp2p/index.d.ts.map +1 -1
  264. package/lib/network/libp2p/index.js +5 -0
  265. package/lib/network/libp2p/index.js.map +1 -1
  266. package/lib/network/network.d.ts +4 -2
  267. package/lib/network/network.d.ts.map +1 -1
  268. package/lib/network/network.js +11 -5
  269. package/lib/network/network.js.map +1 -1
  270. package/lib/network/processor/extractSlotRootFns.d.ts +1 -1
  271. package/lib/network/processor/extractSlotRootFns.d.ts.map +1 -1
  272. package/lib/network/processor/extractSlotRootFns.js +15 -5
  273. package/lib/network/processor/extractSlotRootFns.js.map +1 -1
  274. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  275. package/lib/network/processor/gossipHandlers.js +39 -9
  276. package/lib/network/processor/gossipHandlers.js.map +1 -1
  277. package/lib/network/processor/index.d.ts +12 -7
  278. package/lib/network/processor/index.d.ts.map +1 -1
  279. package/lib/network/processor/index.js +99 -78
  280. package/lib/network/processor/index.js.map +1 -1
  281. package/lib/network/reqresp/ReqRespBeaconNode.d.ts +1 -1
  282. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -1
  283. package/lib/network/reqresp/ReqRespBeaconNode.js +10 -1
  284. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  285. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts +8 -0
  286. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts.map +1 -0
  287. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js +69 -0
  288. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js.map +1 -0
  289. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.d.ts +6 -0
  290. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.d.ts.map +1 -0
  291. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js +28 -0
  292. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js.map +1 -0
  293. package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
  294. package/lib/network/reqresp/handlers/index.js +11 -1
  295. package/lib/network/reqresp/handlers/index.js.map +1 -1
  296. package/lib/network/reqresp/protocols.d.ts +2 -0
  297. package/lib/network/reqresp/protocols.d.ts.map +1 -1
  298. package/lib/network/reqresp/protocols.js +10 -0
  299. package/lib/network/reqresp/protocols.js.map +1 -1
  300. package/lib/network/reqresp/rateLimit.d.ts.map +1 -1
  301. package/lib/network/reqresp/rateLimit.js +8 -0
  302. package/lib/network/reqresp/rateLimit.js.map +1 -1
  303. package/lib/network/reqresp/score.d.ts.map +1 -1
  304. package/lib/network/reqresp/score.js +2 -0
  305. package/lib/network/reqresp/score.js.map +1 -1
  306. package/lib/network/reqresp/types.d.ts +8 -2
  307. package/lib/network/reqresp/types.d.ts.map +1 -1
  308. package/lib/network/reqresp/types.js +7 -1
  309. package/lib/network/reqresp/types.js.map +1 -1
  310. package/lib/node/nodejs.d.ts +2 -2
  311. package/lib/node/nodejs.d.ts.map +1 -1
  312. package/lib/node/nodejs.js +1 -4
  313. package/lib/node/nodejs.js.map +1 -1
  314. package/lib/node/notifier.d.ts.map +1 -1
  315. package/lib/node/notifier.js +3 -3
  316. package/lib/node/notifier.js.map +1 -1
  317. package/lib/sync/backfill/backfill.d.ts +3 -3
  318. package/lib/sync/backfill/backfill.d.ts.map +1 -1
  319. package/lib/sync/backfill/backfill.js +3 -3
  320. package/lib/sync/backfill/backfill.js.map +1 -1
  321. package/lib/sync/constants.d.ts +1 -1
  322. package/lib/sync/constants.js +1 -1
  323. package/lib/sync/unknownBlock.d.ts +3 -9
  324. package/lib/sync/unknownBlock.d.ts.map +1 -1
  325. package/lib/sync/unknownBlock.js +8 -41
  326. package/lib/sync/unknownBlock.js.map +1 -1
  327. package/lib/util/sszBytes.d.ts +4 -1
  328. package/lib/util/sszBytes.d.ts.map +1 -1
  329. package/lib/util/sszBytes.js +69 -12
  330. package/lib/util/sszBytes.js.map +1 -1
  331. package/lib/util/types.d.ts +2 -0
  332. package/lib/util/types.d.ts.map +1 -1
  333. package/lib/util/types.js +1 -0
  334. package/lib/util/types.js.map +1 -1
  335. package/package.json +16 -16
  336. package/src/api/impl/beacon/blocks/index.ts +37 -18
  337. package/src/api/impl/beacon/pool/index.ts +1 -1
  338. package/src/api/impl/beacon/state/index.ts +29 -41
  339. package/src/api/impl/beacon/state/utils.ts +11 -25
  340. package/src/api/impl/lodestar/index.ts +4 -8
  341. package/src/api/impl/proof/index.ts +2 -9
  342. package/src/api/impl/validator/index.ts +29 -41
  343. package/src/api/impl/validator/utils.ts +4 -7
  344. package/src/chain/archiveStore/archiveStore.ts +1 -0
  345. package/src/chain/archiveStore/historicalState/getHistoricalState.ts +10 -39
  346. package/src/chain/archiveStore/historicalState/historicalStateRegen.ts +2 -1
  347. package/src/chain/archiveStore/historicalState/types.ts +2 -0
  348. package/src/chain/archiveStore/historicalState/worker.ts +1 -4
  349. package/src/chain/archiveStore/interface.ts +1 -0
  350. package/src/chain/balancesCache.ts +5 -11
  351. package/src/chain/blocks/blockInput/types.ts +4 -3
  352. package/src/chain/blocks/importBlock.ts +59 -27
  353. package/src/chain/blocks/importExecutionPayload.ts +247 -0
  354. package/src/chain/blocks/index.ts +3 -2
  355. package/src/chain/blocks/payloadEnvelopeInput/index.ts +2 -0
  356. package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +336 -0
  357. package/src/chain/blocks/payloadEnvelopeInput/types.ts +33 -0
  358. package/src/chain/blocks/payloadEnvelopeProcessor.ts +61 -0
  359. package/src/chain/blocks/types.ts +34 -15
  360. package/src/chain/blocks/utils/checkpoint.ts +2 -2
  361. package/src/chain/blocks/verifyBlock.ts +5 -10
  362. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +9 -14
  363. package/src/chain/blocks/verifyBlocksSignatures.ts +3 -3
  364. package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +6 -8
  365. package/src/chain/blocks/writePayloadEnvelopeInputToDb.ts +55 -0
  366. package/src/chain/chain.ts +112 -70
  367. package/src/chain/emitter.ts +2 -2
  368. package/src/chain/errors/blockError.ts +4 -4
  369. package/src/chain/errors/executionPayloadEnvelope.ts +6 -2
  370. package/src/chain/forkChoice/index.ts +33 -52
  371. package/src/chain/initState.ts +7 -2
  372. package/src/chain/interface.ts +18 -16
  373. package/src/chain/lightClient/index.ts +9 -22
  374. package/src/chain/opPools/aggregatedAttestationPool.ts +15 -21
  375. package/src/chain/opPools/opPool.ts +13 -14
  376. package/src/chain/opPools/utils.ts +4 -4
  377. package/src/chain/options.ts +2 -0
  378. package/src/chain/prepareNextSlot.ts +6 -8
  379. package/src/chain/produceBlock/computeNewStateRoot.ts +11 -10
  380. package/src/chain/produceBlock/produceBlockBody.ts +23 -50
  381. package/src/chain/regen/interface.ts +15 -17
  382. package/src/chain/regen/queued.ts +16 -20
  383. package/src/chain/regen/regen.ts +16 -17
  384. package/src/chain/seenCache/index.ts +1 -1
  385. package/src/chain/seenCache/seenGossipBlockInput.ts +2 -2
  386. package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +106 -0
  387. package/src/chain/serializeState.ts +3 -3
  388. package/src/chain/shufflingCache.ts +5 -7
  389. package/src/chain/stateCache/fifoBlockStateCache.ts +7 -7
  390. package/src/chain/stateCache/persistentCheckpointsCache.ts +27 -42
  391. package/src/chain/stateCache/types.ts +14 -18
  392. package/src/chain/validation/attesterSlashing.ts +3 -3
  393. package/src/chain/validation/blobSidecar.ts +1 -1
  394. package/src/chain/validation/block.ts +2 -4
  395. package/src/chain/validation/blsToExecutionChange.ts +2 -2
  396. package/src/chain/validation/dataColumnSidecar.ts +1 -1
  397. package/src/chain/validation/executionPayloadBid.ts +3 -7
  398. package/src/chain/validation/executionPayloadEnvelope.ts +36 -29
  399. package/src/chain/validation/lightClientFinalityUpdate.ts +1 -1
  400. package/src/chain/validation/lightClientOptimisticUpdate.ts +1 -1
  401. package/src/chain/validation/payloadAttestationMessage.ts +2 -4
  402. package/src/chain/validation/proposerSlashing.ts +1 -1
  403. package/src/chain/validation/signatureSets/contributionAndProof.ts +2 -7
  404. package/src/chain/validation/signatureSets/syncCommittee.ts +2 -7
  405. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +2 -2
  406. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +2 -7
  407. package/src/chain/validation/syncCommittee.ts +21 -20
  408. package/src/chain/validation/syncCommitteeContributionAndProof.ts +5 -10
  409. package/src/chain/validation/voluntaryExit.ts +3 -8
  410. package/src/chain/validatorMonitor.ts +23 -12
  411. package/src/execution/engine/interface.ts +2 -2
  412. package/src/metrics/metrics/lodestar.ts +100 -19
  413. package/src/network/gossip/encoding.ts +16 -0
  414. package/src/network/interface.ts +15 -2
  415. package/src/network/libp2p/index.ts +5 -0
  416. package/src/network/network.ts +34 -6
  417. package/src/network/processor/extractSlotRootFns.ts +19 -6
  418. package/src/network/processor/gossipHandlers.ts +45 -8
  419. package/src/network/processor/index.ts +110 -89
  420. package/src/network/reqresp/ReqRespBeaconNode.ts +14 -1
  421. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRange.ts +94 -0
  422. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRoot.ts +43 -0
  423. package/src/network/reqresp/handlers/index.ts +12 -0
  424. package/src/network/reqresp/protocols.ts +12 -0
  425. package/src/network/reqresp/rateLimit.ts +18 -0
  426. package/src/network/reqresp/score.ts +2 -0
  427. package/src/network/reqresp/types.ts +13 -0
  428. package/src/node/nodejs.ts +3 -5
  429. package/src/node/notifier.ts +4 -10
  430. package/src/sync/backfill/backfill.ts +4 -4
  431. package/src/sync/constants.ts +1 -1
  432. package/src/sync/unknownBlock.ts +10 -50
  433. package/src/util/sszBytes.ts +90 -10
  434. package/src/util/types.ts +6 -0
  435. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.d.ts +0 -15
  436. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.d.ts.map +0 -1
  437. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.js +0 -28
  438. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.js.map +0 -1
  439. package/src/chain/seenCache/seenExecutionPayloadEnvelope.ts +0 -34
package/lib/util/types.js CHANGED
@@ -10,4 +10,5 @@ export const signedBLSToExecutionChangeVersionedType = new ContainerType({
10
10
  export const BeaconBlocksByRootRequestType = (fork, config) => new ListCompositeType(ssz.Root, isForkPostDeneb(fork) ? config.MAX_REQUEST_BLOCKS_DENEB : config.MAX_REQUEST_BLOCKS);
11
11
  export const BlobSidecarsByRootRequestType = (fork, config) => new ListCompositeType(ssz.deneb.BlobIdentifier, isForkPostElectra(fork) ? config.MAX_REQUEST_BLOB_SIDECARS_ELECTRA : config.MAX_REQUEST_BLOB_SIDECARS);
12
12
  export const DataColumnSidecarsByRootRequestType = (config) => new ListCompositeType(ssz.fulu.DataColumnsByRootIdentifier, config.MAX_REQUEST_BLOCKS_DENEB);
13
+ export const ExecutionPayloadEnvelopesByRootRequestType = (config) => new ListCompositeType(ssz.Root, config.MAX_REQUEST_PAYLOADS);
13
14
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/util/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,iBAAiB,EAAU,MAAM,gBAAgB,CAAC;AAEzE,OAAO,EAAW,eAAe,EAAE,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAC,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAEpC,oFAAoF;AAEpF,MAAM,CAAC,MAAM,uCAAuC,GAAG,IAAI,aAAa,CACtE;IACE,iEAAiE;IACjE,UAAU,EAAE,GAAG,CAAC,OAAO;IACvB,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,0BAA0B;CAC7C,EACD,EAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,yCAAyC,EAAC,CACxE,CAAC;AAGF,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,IAAc,EAAE,MAAoB,EAAE,EAAE,CACpF,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAGvH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,IAAc,EAAE,MAAoB,EAAE,EAAE,CACpF,IAAI,iBAAiB,CACnB,GAAG,CAAC,KAAK,CAAC,cAAc,EACxB,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC,CAAC,MAAM,CAAC,yBAAyB,CACtG,CAAC;AAGJ,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC,MAAoB,EAAE,EAAE,CAC1E,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,MAAM,CAAC,wBAAwB,CAAC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/util/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,iBAAiB,EAAU,MAAM,gBAAgB,CAAC;AAEzE,OAAO,EAAW,eAAe,EAAE,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAC,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAEpC,oFAAoF;AAEpF,MAAM,CAAC,MAAM,uCAAuC,GAAG,IAAI,aAAa,CACtE;IACE,iEAAiE;IACjE,UAAU,EAAE,GAAG,CAAC,OAAO;IACvB,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,0BAA0B;CAC7C,EACD,EAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,yCAAyC,EAAC,CACxE,CAAC;AAGF,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,IAAc,EAAE,MAAoB,EAAE,EAAE,CACpF,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAGvH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,IAAc,EAAE,MAAoB,EAAE,EAAE,CACpF,IAAI,iBAAiB,CACnB,GAAG,CAAC,KAAK,CAAC,cAAc,EACxB,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC,CAAC,MAAM,CAAC,yBAAyB,CACtG,CAAC;AAGJ,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC,MAAoB,EAAE,EAAE,CAC1E,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,MAAM,CAAC,wBAAwB,CAAC,CAAC;AAG/F,MAAM,CAAC,MAAM,0CAA0C,GAAG,CAAC,MAAoB,EAAE,EAAE,CACjF,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,oBAAoB,CAAC,CAAC"}
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "bugs": {
12
12
  "url": "https://github.com/ChainSafe/lodestar/issues"
13
13
  },
14
- "version": "1.42.0-dev.5f2fffc2ce",
14
+ "version": "1.42.0-dev.687ecdc8cd",
15
15
  "type": "module",
16
16
  "exports": {
17
17
  ".": {
@@ -113,7 +113,7 @@
113
113
  "@chainsafe/discv5": "^12.0.1",
114
114
  "@chainsafe/enr": "^6.0.1",
115
115
  "@chainsafe/libp2p-noise": "^17.0.0",
116
- "@chainsafe/libp2p-quic": "^2.0.0",
116
+ "@chainsafe/libp2p-quic": "^2.0.1",
117
117
  "@chainsafe/persistent-merkle-tree": "^1.2.1",
118
118
  "@chainsafe/prometheus-gc-stats": "^1.0.0",
119
119
  "@chainsafe/pubkey-index-map": "^3.0.0",
@@ -135,18 +135,18 @@
135
135
  "@libp2p/peer-id": "^6.0.4",
136
136
  "@libp2p/prometheus-metrics": "^5.0.14",
137
137
  "@libp2p/tcp": "^11.0.13",
138
- "@lodestar/api": "^1.42.0-dev.5f2fffc2ce",
139
- "@lodestar/config": "^1.42.0-dev.5f2fffc2ce",
140
- "@lodestar/db": "^1.42.0-dev.5f2fffc2ce",
141
- "@lodestar/fork-choice": "^1.42.0-dev.5f2fffc2ce",
142
- "@lodestar/light-client": "^1.42.0-dev.5f2fffc2ce",
143
- "@lodestar/logger": "^1.42.0-dev.5f2fffc2ce",
144
- "@lodestar/params": "^1.42.0-dev.5f2fffc2ce",
145
- "@lodestar/reqresp": "^1.42.0-dev.5f2fffc2ce",
146
- "@lodestar/state-transition": "^1.42.0-dev.5f2fffc2ce",
147
- "@lodestar/types": "^1.42.0-dev.5f2fffc2ce",
148
- "@lodestar/utils": "^1.42.0-dev.5f2fffc2ce",
149
- "@lodestar/validator": "^1.42.0-dev.5f2fffc2ce",
138
+ "@lodestar/api": "^1.42.0-dev.687ecdc8cd",
139
+ "@lodestar/config": "^1.42.0-dev.687ecdc8cd",
140
+ "@lodestar/db": "^1.42.0-dev.687ecdc8cd",
141
+ "@lodestar/fork-choice": "^1.42.0-dev.687ecdc8cd",
142
+ "@lodestar/light-client": "^1.42.0-dev.687ecdc8cd",
143
+ "@lodestar/logger": "^1.42.0-dev.687ecdc8cd",
144
+ "@lodestar/params": "^1.42.0-dev.687ecdc8cd",
145
+ "@lodestar/reqresp": "^1.42.0-dev.687ecdc8cd",
146
+ "@lodestar/state-transition": "^1.42.0-dev.687ecdc8cd",
147
+ "@lodestar/types": "^1.42.0-dev.687ecdc8cd",
148
+ "@lodestar/utils": "^1.42.0-dev.687ecdc8cd",
149
+ "@lodestar/validator": "^1.42.0-dev.687ecdc8cd",
150
150
  "@multiformats/multiaddr": "^13.0.1",
151
151
  "datastore-core": "^11.0.2",
152
152
  "datastore-fs": "^11.0.2",
@@ -169,7 +169,7 @@
169
169
  "@libp2p/interface-internal": "^3.0.13",
170
170
  "@libp2p/logger": "^6.2.2",
171
171
  "@libp2p/utils": "^7.0.13",
172
- "@lodestar/spec-test-util": "^1.42.0-dev.5f2fffc2ce",
172
+ "@lodestar/spec-test-util": "^1.42.0-dev.687ecdc8cd",
173
173
  "@types/js-yaml": "^4.0.5",
174
174
  "@types/qs": "^6.9.7",
175
175
  "@types/tmp": "^0.2.3",
@@ -186,5 +186,5 @@
186
186
  "beacon",
187
187
  "blockchain"
188
188
  ],
189
- "gitHead": "6190f82ce7dc565e0878bd4b743b13870465469e"
189
+ "gitHead": "a459ab528047efd3df24befc0aed472ac414191b"
190
190
  }
@@ -35,6 +35,7 @@ import {
35
35
  } from "@lodestar/types";
36
36
  import {fromHex, sleep, toHex, toRootHex} from "@lodestar/utils";
37
37
  import {BlockInputSource, isBlockInputBlobs, isBlockInputColumns} from "../../../../chain/blocks/blockInput/index.js";
38
+ import {PayloadEnvelopeInputSource} from "../../../../chain/blocks/payloadEnvelopeInput/index.js";
38
39
  import {ImportBlockOpts} from "../../../../chain/blocks/types.js";
39
40
  import {verifyBlocksInEpoch} from "../../../../chain/blocks/verifyBlock.js";
40
41
  import {BeaconChain} from "../../../../chain/chain.js";
@@ -48,6 +49,7 @@ import {
48
49
  ProduceFullGloas,
49
50
  } from "../../../../chain/produceBlock/index.js";
50
51
  import {validateGossipBlock} from "../../../../chain/validation/block.js";
52
+ import {validateApiExecutionPayloadEnvelope} from "../../../../chain/validation/executionPayloadEnvelope.js";
51
53
  import {OpSource} from "../../../../chain/validatorMonitor.js";
52
54
  import {
53
55
  computePreFuluKzgCommitmentsInclusionProof,
@@ -605,7 +607,7 @@ export function getBeaconBlockApi({
605
607
  if (slot < head.slot && head.slot <= slot + SLOTS_PER_HISTORICAL_ROOT) {
606
608
  const state = chain.getHeadState();
607
609
  return {
608
- data: {root: state.blockRoots.get(slot % SLOTS_PER_HISTORICAL_ROOT)},
610
+ data: {root: state.getBlockRootAtSlot(slot)},
609
611
  meta: {
610
612
  executionOptimistic: isOptimisticBlock(head),
611
613
  finalized: computeEpochAtSlot(slot) <= chain.forkChoice.getFinalizedCheckpoint().epoch,
@@ -659,6 +661,8 @@ export function getBeaconBlockApi({
659
661
  throw new ApiError(400, `Envelope slot ${slot} does not match block slot ${block.slot}`);
660
662
  }
661
663
 
664
+ await validateApiExecutionPayloadEnvelope(chain, signedExecutionPayloadEnvelope);
665
+
662
666
  const isSelfBuild = envelope.builderIndex === BUILDER_INDEX_SELF_BUILD;
663
667
  let dataColumnSidecars: gloas.DataColumnSidecars = [];
664
668
 
@@ -676,6 +680,7 @@ export function getBeaconBlockApi({
676
680
  }
677
681
 
678
682
  if (cachedResult.cells && cachedResult.blobsBundle.commitments.length > 0) {
683
+ const timer = metrics?.peerDas.dataColumnSidecarComputationTime.startTimer();
679
684
  const cellsAndProofs = cachedResult.cells.map((rowCells, rowIndex) => ({
680
685
  cells: rowCells,
681
686
  proofs: cachedResult.blobsBundle.proofs.slice(
@@ -685,24 +690,42 @@ export function getBeaconBlockApi({
685
690
  }));
686
691
 
687
692
  dataColumnSidecars = getDataColumnSidecarsForGloas(slot, envelope.beaconBlockRoot, cellsAndProofs);
693
+ timer?.();
688
694
  }
689
695
  } else {
690
696
  // TODO GLOAS: will this api be used by builders or only for self-building?
691
697
  }
692
698
 
693
- // TODO GLOAS: Verify execution payload envelope signature
694
- // For self-builds, the proposer signs with their own validator key
695
- // For external builders, verify using the builder's registered pubkey
696
- // Use verify_execution_payload_envelope_signature(state, signed_envelope)
699
+ // If called near a slot boundary (e.g. late in slot N-1), hold briefly so gossip aligns with slot N.
700
+ const msToBlockSlot = computeTimeAtSlot(config, slot, chain.genesisTime) * 1000 - Date.now();
701
+ if (msToBlockSlot <= MAX_API_CLOCK_DISPARITY_MS && msToBlockSlot > 0) {
702
+ await sleep(msToBlockSlot);
703
+ }
697
704
 
698
- // TODO GLOAS: Process execution payload via state transition
699
- // Call process_execution_payload(state, signed_envelope, execution_engine)
705
+ // TODO GLOAS: if block and payload are submitted in parallel, payloadInput may not yet exist.
706
+ // A queuing mechanism is needed to handle this case. See https://github.com/ChainSafe/lodestar/issues/8915
707
+ const payloadInput = chain.seenPayloadEnvelopeInputCache.get(blockRootHex);
708
+ if (!payloadInput) {
709
+ throw new ApiError(404, `PayloadEnvelopeInput not found for block root ${blockRootHex}`);
710
+ }
700
711
 
701
- // TODO GLOAS: Update fork choice with the execution payload
702
- // Call on_execution_payload(store, signed_envelope) to update fork choice state
712
+ payloadInput.addPayloadEnvelope({
713
+ envelope: signedExecutionPayloadEnvelope,
714
+ source: PayloadEnvelopeInputSource.api,
715
+ seenTimestampSec,
716
+ peerIdStr: undefined,
717
+ });
703
718
 
704
- // TODO GLOAS: Add envelope and data columns to block input via seenBlockInputCache
705
- // and trigger block import (Gloas block import requires both beacon block and envelope)
719
+ if (dataColumnSidecars.length > 0) {
720
+ for (const columnSidecar of dataColumnSidecars) {
721
+ payloadInput.addColumn({
722
+ columnSidecar,
723
+ source: PayloadEnvelopeInputSource.api,
724
+ seenTimestampSec,
725
+ peerIdStr: undefined,
726
+ });
727
+ }
728
+ }
706
729
 
707
730
  const valLogMeta = {
708
731
  slot,
@@ -712,23 +735,19 @@ export function getBeaconBlockApi({
712
735
  dataColumns: dataColumnSidecars.length,
713
736
  };
714
737
 
715
- // If called near a slot boundary (e.g. late in slot N-1), hold briefly so gossip aligns with slot N.
716
- const msToBlockSlot = computeTimeAtSlot(config, slot, chain.genesisTime) * 1000 - Date.now();
717
- if (msToBlockSlot <= MAX_API_CLOCK_DISPARITY_MS && msToBlockSlot > 0) {
718
- await sleep(msToBlockSlot);
719
- }
720
-
721
738
  const delaySec = seenTimestampSec - computeTimeAtSlot(config, slot, chain.genesisTime);
722
739
  metrics?.gossipExecutionPayloadEnvelope.elapsedTimeTillReceived.observe({source: OpSource.api}, delaySec);
740
+ chain.validatorMonitor?.registerExecutionPayloadEnvelope(OpSource.api, delaySec, signedExecutionPayloadEnvelope);
723
741
 
724
742
  chain.logger.info("Publishing execution payload envelope", valLogMeta);
725
743
 
726
- // Publish envelope and data columns
727
744
  const publishPromises = [
728
745
  // Gossip the signed execution payload envelope first
729
746
  () => network.publishSignedExecutionPayloadEnvelope(signedExecutionPayloadEnvelope),
730
747
  // For self-builds, publish all data column sidecars
731
748
  ...dataColumnSidecars.map((dataColumnSidecar) => () => network.publishDataColumnSidecar(dataColumnSidecar)),
749
+ // Import execution payload. Signature already verified above
750
+ () => chain.processExecutionPayload(payloadInput, {validSignature: true}),
732
751
  ];
733
752
 
734
753
  const sentPeersArr = await promiseAllMaybeAsync<number | void>(publishPromises);
@@ -255,7 +255,7 @@ export function getBeaconPoolApi({
255
255
  await Promise.all(
256
256
  signatures.map(async (signature, i) => {
257
257
  try {
258
- const synCommittee = state.epochCtx.getIndexedSyncCommittee(signature.slot);
258
+ const synCommittee = state.getIndexedSyncCommittee(signature.slot);
259
259
  const indexesInCommittee = synCommittee.validatorIndexMap.get(signature.validatorIndex);
260
260
  if (indexesInCommittee === undefined || indexesInCommittee.length === 0) {
261
261
  return; // Not a sync committee member
@@ -8,17 +8,12 @@ import {
8
8
  isForkPostFulu,
9
9
  } from "@lodestar/params";
10
10
  import {
11
- BeaconStateAllForks,
12
- BeaconStateElectra,
13
- BeaconStateFulu,
14
- CachedBeaconStateAltair,
11
+ IBeaconStateView,
15
12
  computeEpochAtSlot,
16
13
  computeStartSlotAtEpoch,
17
14
  getCurrentEpoch,
18
- getRandaoMix,
19
- loadState,
20
15
  } from "@lodestar/state-transition";
21
- import {ValidatorIndex, getValidatorStatus} from "@lodestar/types";
16
+ import {ValidatorIndex, getValidatorStatus, ssz} from "@lodestar/types";
22
17
  import {ApiError} from "../../errors.js";
23
18
  import {ApiModules} from "../../types.js";
24
19
  import {assertUniqueItems} from "../../utils.js";
@@ -35,11 +30,11 @@ export function getBeaconStateApi({
35
30
  }: Pick<ApiModules, "chain" | "config">): ApplicationMethods<routes.beacon.state.Endpoints> {
36
31
  async function getState(
37
32
  stateId: routes.beacon.StateId
38
- ): Promise<{state: BeaconStateAllForks; executionOptimistic: boolean; finalized: boolean}> {
33
+ ): Promise<{state: IBeaconStateView; executionOptimistic: boolean; finalized: boolean}> {
39
34
  const {state, executionOptimistic, finalized} = await getStateResponseWithRegen(chain, stateId);
40
35
 
41
36
  return {
42
- state: state instanceof Uint8Array ? loadState(config, chain.getHeadState(), state).state : state,
37
+ state: state instanceof Uint8Array ? chain.getHeadState().loadOtherState(state) : state,
43
38
  executionOptimistic,
44
39
  finalized,
45
40
  };
@@ -71,7 +66,7 @@ export function getBeaconStateApi({
71
66
  throw new ApiError(400, "Requested epoch is out of range");
72
67
  }
73
68
 
74
- const randao = getRandaoMix(state, usedEpoch);
69
+ const randao = state.getRandaoMix(usedEpoch);
75
70
 
76
71
  return {
77
72
  data: {randao},
@@ -94,7 +89,6 @@ export function getBeaconStateApi({
94
89
  async getStateValidators({stateId, validatorIds = [], statuses = []}) {
95
90
  const {state, executionOptimistic, finalized} = await getState(stateId);
96
91
  const currentEpoch = getCurrentEpoch(state);
97
- const {validators, balances} = state; // Get the validators sub tree once for all the loop
98
92
  const {pubkeyCache} = chain;
99
93
 
100
94
  const validatorResponses: routes.beacon.ValidatorResponse[] = [];
@@ -105,14 +99,14 @@ export function getBeaconStateApi({
105
99
  const resp = getStateValidatorIndex(id, state, pubkeyCache);
106
100
  if (resp.valid) {
107
101
  const validatorIndex = resp.validatorIndex;
108
- const validator = validators.getReadonly(validatorIndex);
102
+ const validator = state.getValidator(validatorIndex);
109
103
  if (statuses.length && !statuses.includes(getValidatorStatus(validator, currentEpoch))) {
110
104
  continue;
111
105
  }
112
106
  const validatorResponse = toValidatorResponse(
113
107
  validatorIndex,
114
108
  validator,
115
- balances.get(validatorIndex),
109
+ state.getBalance(validatorIndex),
116
110
  currentEpoch
117
111
  );
118
112
  validatorResponses.push(validatorResponse);
@@ -135,8 +129,8 @@ export function getBeaconStateApi({
135
129
  }
136
130
 
137
131
  // TODO: This loops over the entire state, it's a DOS vector
138
- const validatorsArr = state.validators.getAllReadonlyValues();
139
- const balancesArr = state.balances.getAll();
132
+ const validatorsArr = state.getAllValidators();
133
+ const balancesArr = state.getAllBalances();
140
134
  const resp: routes.beacon.ValidatorResponse[] = [];
141
135
  for (let i = 0; i < validatorsArr.length; i++) {
142
136
  resp.push(toValidatorResponse(i, validatorsArr[i], balancesArr[i], currentEpoch));
@@ -166,12 +160,12 @@ export function getBeaconStateApi({
166
160
  const resp = getStateValidatorIndex(id, state, pubkeyCache);
167
161
  if (resp.valid) {
168
162
  const index = resp.validatorIndex;
169
- const {pubkey, activationEpoch} = state.validators.getReadonly(index);
163
+ const {pubkey, activationEpoch} = state.getValidator(index);
170
164
  validatorIdentities.push({index, pubkey, activationEpoch});
171
165
  }
172
166
  }
173
167
  } else {
174
- const validatorsArr = state.validators.getAllReadonlyValues();
168
+ const validatorsArr = state.getAllValidators();
175
169
  validatorIdentities = new Array(validatorsArr.length) as routes.beacon.ValidatorIdentities;
176
170
  for (let i = 0; i < validatorsArr.length; i++) {
177
171
  const {pubkey, activationEpoch} = validatorsArr[i];
@@ -198,8 +192,8 @@ export function getBeaconStateApi({
198
192
  return {
199
193
  data: toValidatorResponse(
200
194
  validatorIndex,
201
- state.validators.getReadonly(validatorIndex),
202
- state.balances.get(validatorIndex),
195
+ state.getValidator(validatorIndex),
196
+ state.getBalance(validatorIndex),
203
197
  getCurrentEpoch(state)
204
198
  ),
205
199
  meta: {executionOptimistic, finalized},
@@ -219,7 +213,7 @@ export function getBeaconStateApi({
219
213
  if (resp.valid) {
220
214
  balances.push({
221
215
  index: resp.validatorIndex,
222
- balance: state.balances.get(resp.validatorIndex),
216
+ balance: state.getBalance(resp.validatorIndex),
223
217
  });
224
218
  }
225
219
  }
@@ -230,7 +224,7 @@ export function getBeaconStateApi({
230
224
  }
231
225
 
232
226
  // TODO: This loops over the entire state, it's a DOS vector
233
- const balancesArr = state.balances.getAll();
227
+ const balancesArr = state.getAllBalances();
234
228
  const resp: routes.beacon.ValidatorBalance[] = [];
235
229
  for (let i = 0; i < balancesArr.length; i++) {
236
230
  resp.push({index: i, balance: balancesArr[i]});
@@ -248,11 +242,6 @@ export function getBeaconStateApi({
248
242
  async getEpochCommittees({stateId, ...filters}) {
249
243
  const {state, executionOptimistic, finalized} = await getState(stateId);
250
244
 
251
- const stateCached = state as CachedBeaconStateAltair;
252
- if (stateCached.epochCtx === undefined) {
253
- throw new ApiError(400, `No cached state available for stateId: ${stateId}`);
254
- }
255
-
256
245
  const stateEpoch = computeEpochAtSlot(state.slot);
257
246
  const epoch = filters.epoch ?? stateEpoch;
258
247
  const startSlot = computeStartSlotAtEpoch(epoch);
@@ -266,7 +255,7 @@ export function getBeaconStateApi({
266
255
  throw new ApiError(400, `Slot ${filters.slot} is not in epoch ${epoch}`);
267
256
  }
268
257
 
269
- const decisionRoot = stateCached.epochCtx.getShufflingDecisionRoot(epoch);
258
+ const decisionRoot = state.getShufflingDecisionRoot(epoch);
270
259
  const shuffling = await chain.shufflingCache.get(epoch, decisionRoot);
271
260
  if (!shuffling) {
272
261
  throw new ApiError(
@@ -315,12 +304,7 @@ export function getBeaconStateApi({
315
304
  throw new ApiError(400, "Requested state before ALTAIR_FORK_EPOCH");
316
305
  }
317
306
 
318
- const stateCached = state as CachedBeaconStateAltair;
319
- if (stateCached.epochCtx === undefined) {
320
- throw new ApiError(400, `No cached state available for stateId: ${stateId}`);
321
- }
322
-
323
- const syncCommitteeCache = stateCached.epochCtx.getIndexedSyncCommitteeAtEpoch(epoch ?? stateEpoch);
307
+ const syncCommitteeCache = state.getIndexedSyncCommitteeAtEpoch(epoch ?? stateEpoch);
324
308
  const validatorIndices = new Array<ValidatorIndex>(...syncCommitteeCache.validatorIndices);
325
309
 
326
310
  // Subcommittee assignments of the current sync committee
@@ -346,10 +330,10 @@ export function getBeaconStateApi({
346
330
  throw new ApiError(400, `Cannot retrieve pending deposits for pre-electra state fork=${fork}`);
347
331
  }
348
332
 
349
- const {pendingDeposits} = state as BeaconStateElectra;
333
+ const pendingDeposits = state.pendingDeposits;
350
334
 
351
335
  return {
352
- data: context?.returnBytes ? pendingDeposits.serialize() : pendingDeposits.toValue(),
336
+ data: context?.returnBytes ? ssz.electra.PendingDeposits.serialize(pendingDeposits) : pendingDeposits,
353
337
  meta: {executionOptimistic, finalized, version: fork},
354
338
  };
355
339
  },
@@ -362,10 +346,12 @@ export function getBeaconStateApi({
362
346
  throw new ApiError(400, `Cannot retrieve pending partial withdrawals for pre-electra state fork=${fork}`);
363
347
  }
364
348
 
365
- const {pendingPartialWithdrawals} = state as BeaconStateElectra;
349
+ const pendingPartialWithdrawals = state.pendingPartialWithdrawals;
366
350
 
367
351
  return {
368
- data: context?.returnBytes ? pendingPartialWithdrawals.serialize() : pendingPartialWithdrawals.toValue(),
352
+ data: context?.returnBytes
353
+ ? ssz.electra.PendingPartialWithdrawals.serialize(pendingPartialWithdrawals)
354
+ : pendingPartialWithdrawals,
369
355
  meta: {executionOptimistic, finalized, version: fork},
370
356
  };
371
357
  },
@@ -378,10 +364,12 @@ export function getBeaconStateApi({
378
364
  throw new ApiError(400, `Cannot retrieve pending consolidations for pre-electra state fork=${fork}`);
379
365
  }
380
366
 
381
- const {pendingConsolidations} = state as BeaconStateElectra;
367
+ const pendingConsolidations = state.pendingConsolidations;
382
368
 
383
369
  return {
384
- data: context?.returnBytes ? pendingConsolidations.serialize() : pendingConsolidations.toValue(),
370
+ data: context?.returnBytes
371
+ ? ssz.electra.PendingConsolidations.serialize(pendingConsolidations)
372
+ : pendingConsolidations,
385
373
  meta: {executionOptimistic, finalized, version: fork},
386
374
  };
387
375
  },
@@ -394,10 +382,10 @@ export function getBeaconStateApi({
394
382
  throw new ApiError(400, `Cannot retrieve proposer lookahead for pre-fulu state fork=${fork}`);
395
383
  }
396
384
 
397
- const {proposerLookahead} = state as BeaconStateFulu;
385
+ const proposerLookahead = state.proposerLookahead;
398
386
 
399
387
  return {
400
- data: context?.returnBytes ? proposerLookahead.serialize() : proposerLookahead.toValue(),
388
+ data: context?.returnBytes ? ssz.fulu.ProposerLookahead.serialize(proposerLookahead) : proposerLookahead,
401
389
  meta: {executionOptimistic, finalized, version: fork},
402
390
  };
403
391
  },
@@ -1,17 +1,8 @@
1
1
  import {routes} from "@lodestar/api";
2
2
  import {CheckpointWithPayloadStatus, IForkChoice} from "@lodestar/fork-choice";
3
3
  import {GENESIS_SLOT} from "@lodestar/params";
4
- import {BeaconStateAllForks, CachedBeaconStateAllForks, PubkeyCache} from "@lodestar/state-transition";
5
- import {
6
- BLSPubkey,
7
- Epoch,
8
- RootHex,
9
- Slot,
10
- ValidatorIndex,
11
- getValidatorStatus,
12
- mapToGeneralStatus,
13
- phase0,
14
- } from "@lodestar/types";
4
+ import {IBeaconStateView, PubkeyCache} from "@lodestar/state-transition";
5
+ import {BLSPubkey, Epoch, RootHex, Slot, ValidatorIndex, getValidatorStatus, phase0} from "@lodestar/types";
15
6
  import {fromHex} from "@lodestar/utils";
16
7
  import {IBeaconChain} from "../../../../chain/index.js";
17
8
  import {ApiError, ValidationError} from "../../errors.js";
@@ -52,7 +43,7 @@ export function resolveStateId(
52
43
  export async function getStateResponseWithRegen(
53
44
  chain: IBeaconChain,
54
45
  inStateId: routes.beacon.StateId
55
- ): Promise<{state: CachedBeaconStateAllForks | Uint8Array; executionOptimistic: boolean; finalized: boolean}> {
46
+ ): Promise<{state: IBeaconStateView | Uint8Array; executionOptimistic: boolean; finalized: boolean}> {
56
47
  const stateId = resolveStateId(chain.forkChoice, inStateId);
57
48
 
58
49
  const res =
@@ -89,22 +80,17 @@ export function toValidatorResponse(
89
80
 
90
81
  export function filterStateValidatorsByStatus(
91
82
  statuses: string[],
92
- state: BeaconStateAllForks,
83
+ state: IBeaconStateView,
93
84
  pubkeyCache: PubkeyCache,
94
85
  currentEpoch: Epoch
95
86
  ): routes.beacon.ValidatorResponse[] {
96
87
  const responses: routes.beacon.ValidatorResponse[] = [];
97
- const validatorsArr = state.validators.getAllReadonlyValues();
98
- const statusSet = new Set(statuses);
99
-
100
- for (const validator of validatorsArr) {
101
- const validatorStatus = getValidatorStatus(validator, currentEpoch);
102
- const generalStatus = mapToGeneralStatus(validatorStatus);
103
-
88
+ const validators = state.getValidatorsByStatus(new Set(statuses), currentEpoch);
89
+ for (const validator of validators) {
104
90
  const resp = getStateValidatorIndex(validator.pubkey, state, pubkeyCache);
105
- if (resp.valid && (statusSet.has(validatorStatus) || statusSet.has(generalStatus))) {
91
+ if (resp.valid) {
106
92
  responses.push(
107
- toValidatorResponse(resp.validatorIndex, validator, state.balances.get(resp.validatorIndex), currentEpoch)
93
+ toValidatorResponse(resp.validatorIndex, validator, state.getBalance(resp.validatorIndex), currentEpoch)
108
94
  );
109
95
  }
110
96
  }
@@ -117,7 +103,7 @@ type StateValidatorIndexResponse =
117
103
 
118
104
  export function getStateValidatorIndex(
119
105
  id: routes.beacon.ValidatorId | BLSPubkey,
120
- state: BeaconStateAllForks,
106
+ state: IBeaconStateView,
121
107
  pubkeyCache: PubkeyCache
122
108
  ): StateValidatorIndexResponse {
123
109
  if (typeof id === "string") {
@@ -139,7 +125,7 @@ export function getStateValidatorIndex(
139
125
  if (!Number.isSafeInteger(validatorIndex)) {
140
126
  return {valid: false, code: 400, reason: "Invalid validator index"};
141
127
  }
142
- if (validatorIndex >= state.validators.length) {
128
+ if (validatorIndex >= state.validatorCount) {
143
129
  return {valid: false, code: 404, reason: "Validator index from future state"};
144
130
  }
145
131
  return {valid: true, validatorIndex};
@@ -150,7 +136,7 @@ export function getStateValidatorIndex(
150
136
  if (validatorIndex === null) {
151
137
  return {valid: false, code: 404, reason: "Validator pubkey not found in state"};
152
138
  }
153
- if (validatorIndex >= state.validators.length) {
139
+ if (validatorIndex >= state.validatorCount) {
154
140
  return {valid: false, code: 404, reason: "Validator pubkey from future state"};
155
141
  }
156
142
  return {valid: true, validatorIndex};
@@ -1,10 +1,8 @@
1
- import {Tree} from "@chainsafe/persistent-merkle-tree";
2
1
  import {routes} from "@lodestar/api";
3
2
  import {ApplicationMethods} from "@lodestar/api/server";
4
3
  import {ChainForkConfig} from "@lodestar/config";
5
4
  import {Repository} from "@lodestar/db";
6
5
  import {ForkSeq, SLOTS_PER_EPOCH} from "@lodestar/params";
7
- import {BeaconStateCapella, getLatestWeakSubjectivityCheckpointEpoch, loadState} from "@lodestar/state-transition";
8
6
  import {ssz} from "@lodestar/types";
9
7
  import {Checkpoint} from "@lodestar/types/phase0";
10
8
  import {fromHex, toHex, toRootHex} from "@lodestar/utils";
@@ -86,7 +84,7 @@ export function getLodestarApi({
86
84
 
87
85
  async getLatestWeakSubjectivityCheckpointEpoch() {
88
86
  const state = chain.getHeadState();
89
- return {data: getLatestWeakSubjectivityCheckpointEpoch(config, state)};
87
+ return {data: state.getLatestWeakSubjectivityCheckpointEpoch()};
90
88
  },
91
89
 
92
90
  async getSyncChainsDebugState() {
@@ -214,9 +212,7 @@ export function getLodestarApi({
214
212
  async getHistoricalSummaries({stateId}) {
215
213
  const {state, executionOptimistic, finalized} = await getStateResponseWithRegen(chain, stateId);
216
214
 
217
- const stateView = (
218
- state instanceof Uint8Array ? loadState(config, chain.getHeadState(), state).state : state
219
- ) as BeaconStateCapella;
215
+ const stateView = state instanceof Uint8Array ? chain.getHeadState().loadOtherState(state) : state;
220
216
 
221
217
  const fork = config.getForkName(stateView.slot);
222
218
  if (ForkSeq[fork] < ForkSeq.capella) {
@@ -224,12 +220,12 @@ export function getLodestarApi({
224
220
  }
225
221
 
226
222
  const {gindex} = ssz[fork].BeaconState.getPathInfo(["historicalSummaries"]);
227
- const proof = new Tree(stateView.node).getSingleProof(gindex);
223
+ const proof = stateView.getSingleProof(gindex);
228
224
 
229
225
  return {
230
226
  data: {
231
227
  slot: stateView.slot,
232
- historicalSummaries: stateView.historicalSummaries.toValue(),
228
+ historicalSummaries: stateView.historicalSummaries,
233
229
  proof: proof,
234
230
  },
235
231
  meta: {executionOptimistic, finalized, version: fork},
@@ -1,7 +1,6 @@
1
1
  import {CompactMultiProof, ProofType, createProof} from "@chainsafe/persistent-merkle-tree";
2
2
  import {routes} from "@lodestar/api";
3
3
  import {ApplicationMethods} from "@lodestar/api/server";
4
- import {loadState} from "@lodestar/state-transition";
5
4
  import {ApiOptions} from "../../options.js";
6
5
  import {getBlockResponse} from "../beacon/blocks/utils.js";
7
6
  import {getStateResponseWithRegen} from "../beacon/state/utils.js";
@@ -24,16 +23,10 @@ export function getProofApi(
24
23
 
25
24
  const res = await getStateResponseWithRegen(chain, stateId);
26
25
 
27
- const state =
28
- res.state instanceof Uint8Array ? loadState(config, chain.getHeadState(), res.state).state : res.state;
29
-
30
- // there should be no state changes in beacon-node so no need to commit() here
31
- const stateNode = state.node;
32
-
33
- const proof = createProof(stateNode, {type: ProofType.compactMulti, descriptor});
26
+ const state = res.state instanceof Uint8Array ? chain.getHeadState().loadOtherState(res.state) : res.state;
34
27
 
35
28
  return {
36
- data: proof as CompactMultiProof,
29
+ data: state.createMultiProof(descriptor),
37
30
  meta: {version: config.getForkName(state.slot)},
38
31
  };
39
32
  },