@lodestar/beacon-node 1.42.0-dev.1d50253953 → 1.42.0-dev.2219bb0cb8

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 (494) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +45 -13
  3. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  4. package/lib/api/impl/beacon/pool/index.d.ts.map +1 -1
  5. package/lib/api/impl/beacon/pool/index.js +5 -1
  6. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  7. package/lib/api/impl/beacon/state/index.d.ts.map +1 -1
  8. package/lib/api/impl/beacon/state/index.js +38 -40
  9. package/lib/api/impl/beacon/state/index.js.map +1 -1
  10. package/lib/api/impl/beacon/state/utils.d.ts +4 -4
  11. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
  12. package/lib/api/impl/beacon/state/utils.js +7 -10
  13. package/lib/api/impl/beacon/state/utils.js.map +1 -1
  14. package/lib/api/impl/debug/index.js.map +1 -1
  15. package/lib/api/impl/lodestar/index.d.ts.map +1 -1
  16. package/lib/api/impl/lodestar/index.js +8 -6
  17. package/lib/api/impl/lodestar/index.js.map +1 -1
  18. package/lib/api/impl/proof/index.d.ts.map +1 -1
  19. package/lib/api/impl/proof/index.js +2 -6
  20. package/lib/api/impl/proof/index.js.map +1 -1
  21. package/lib/api/impl/validator/index.d.ts.map +1 -1
  22. package/lib/api/impl/validator/index.js +35 -29
  23. package/lib/api/impl/validator/index.js.map +1 -1
  24. package/lib/api/impl/validator/utils.d.ts +2 -2
  25. package/lib/api/impl/validator/utils.d.ts.map +1 -1
  26. package/lib/api/impl/validator/utils.js +3 -3
  27. package/lib/api/impl/validator/utils.js.map +1 -1
  28. package/lib/chain/ColumnReconstructionTracker.d.ts +2 -1
  29. package/lib/chain/ColumnReconstructionTracker.d.ts.map +1 -1
  30. package/lib/chain/ColumnReconstructionTracker.js +5 -5
  31. package/lib/chain/ColumnReconstructionTracker.js.map +1 -1
  32. package/lib/chain/GetBlobsTracker.d.ts +2 -1
  33. package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
  34. package/lib/chain/GetBlobsTracker.js +14 -12
  35. package/lib/chain/GetBlobsTracker.js.map +1 -1
  36. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  37. package/lib/chain/archiveStore/archiveStore.js +1 -0
  38. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  39. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts +3 -7
  40. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +1 -1
  41. package/lib/chain/archiveStore/historicalState/getHistoricalState.js +8 -26
  42. package/lib/chain/archiveStore/historicalState/getHistoricalState.js.map +1 -1
  43. package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts +2 -2
  44. package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts.map +1 -1
  45. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js +1 -0
  46. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js.map +1 -1
  47. package/lib/chain/archiveStore/historicalState/types.d.ts +2 -0
  48. package/lib/chain/archiveStore/historicalState/types.d.ts.map +1 -1
  49. package/lib/chain/archiveStore/historicalState/types.js.map +1 -1
  50. package/lib/chain/archiveStore/historicalState/worker.js +1 -3
  51. package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
  52. package/lib/chain/archiveStore/interface.d.ts +1 -0
  53. package/lib/chain/archiveStore/interface.d.ts.map +1 -1
  54. package/lib/chain/balancesCache.d.ts +2 -2
  55. package/lib/chain/balancesCache.d.ts.map +1 -1
  56. package/lib/chain/balancesCache.js +4 -4
  57. package/lib/chain/balancesCache.js.map +1 -1
  58. package/lib/chain/blocks/blockInput/blockInput.d.ts +5 -5
  59. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
  60. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  61. package/lib/chain/blocks/blockInput/types.d.ts +5 -4
  62. package/lib/chain/blocks/blockInput/types.d.ts.map +1 -1
  63. package/lib/chain/blocks/blockInput/types.js +1 -0
  64. package/lib/chain/blocks/blockInput/types.js.map +1 -1
  65. package/lib/chain/blocks/importBlock.d.ts +3 -3
  66. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  67. package/lib/chain/blocks/importBlock.js +37 -23
  68. package/lib/chain/blocks/importBlock.js.map +1 -1
  69. package/lib/chain/blocks/importExecutionPayload.d.ts +10 -8
  70. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  71. package/lib/chain/blocks/importExecutionPayload.js +87 -51
  72. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  73. package/lib/chain/blocks/index.d.ts.map +1 -1
  74. package/lib/chain/blocks/index.js +3 -2
  75. package/lib/chain/blocks/index.js.map +1 -1
  76. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +14 -6
  77. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -1
  78. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +33 -2
  79. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -1
  80. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +2 -1
  81. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -1
  82. package/lib/chain/blocks/types.d.ts +21 -15
  83. package/lib/chain/blocks/types.d.ts.map +1 -1
  84. package/lib/chain/blocks/types.js.map +1 -1
  85. package/lib/chain/blocks/utils/checkpoint.d.ts +2 -2
  86. package/lib/chain/blocks/utils/checkpoint.d.ts.map +1 -1
  87. package/lib/chain/blocks/utils/checkpoint.js.map +1 -1
  88. package/lib/chain/blocks/verifyBlock.d.ts +2 -2
  89. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  90. package/lib/chain/blocks/verifyBlock.js +4 -4
  91. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  92. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +5 -5
  93. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  94. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +5 -4
  95. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  96. package/lib/chain/blocks/verifyBlocksSignatures.d.ts +2 -2
  97. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  98. package/lib/chain/blocks/verifyBlocksSignatures.js +4 -2
  99. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  100. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts +3 -3
  101. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +1 -1
  102. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js +3 -3
  103. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
  104. package/lib/chain/chain.d.ts +16 -14
  105. package/lib/chain/chain.d.ts.map +1 -1
  106. package/lib/chain/chain.js +123 -66
  107. package/lib/chain/chain.js.map +1 -1
  108. package/lib/chain/emitter.d.ts +31 -9
  109. package/lib/chain/emitter.d.ts.map +1 -1
  110. package/lib/chain/emitter.js +12 -3
  111. package/lib/chain/emitter.js.map +1 -1
  112. package/lib/chain/errors/blockError.d.ts +15 -5
  113. package/lib/chain/errors/blockError.d.ts.map +1 -1
  114. package/lib/chain/errors/blockError.js +4 -0
  115. package/lib/chain/errors/blockError.js.map +1 -1
  116. package/lib/chain/errors/dataColumnSidecarError.d.ts +31 -1
  117. package/lib/chain/errors/dataColumnSidecarError.d.ts.map +1 -1
  118. package/lib/chain/errors/dataColumnSidecarError.js +7 -0
  119. package/lib/chain/errors/dataColumnSidecarError.js.map +1 -1
  120. package/lib/chain/forkChoice/index.d.ts +4 -4
  121. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  122. package/lib/chain/forkChoice/index.js +30 -24
  123. package/lib/chain/forkChoice/index.js.map +1 -1
  124. package/lib/chain/initState.d.ts +2 -2
  125. package/lib/chain/initState.d.ts.map +1 -1
  126. package/lib/chain/initState.js +1 -1
  127. package/lib/chain/initState.js.map +1 -1
  128. package/lib/chain/interface.d.ts +16 -14
  129. package/lib/chain/interface.d.ts.map +1 -1
  130. package/lib/chain/interface.js.map +1 -1
  131. package/lib/chain/lightClient/index.d.ts +2 -2
  132. package/lib/chain/lightClient/index.d.ts.map +1 -1
  133. package/lib/chain/lightClient/index.js +11 -4
  134. package/lib/chain/lightClient/index.js.map +1 -1
  135. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +6 -6
  136. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  137. package/lib/chain/opPools/aggregatedAttestationPool.js +13 -13
  138. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  139. package/lib/chain/opPools/executionPayloadBidPool.d.ts +2 -2
  140. package/lib/chain/opPools/executionPayloadBidPool.d.ts.map +1 -1
  141. package/lib/chain/opPools/executionPayloadBidPool.js +2 -2
  142. package/lib/chain/opPools/executionPayloadBidPool.js.map +1 -1
  143. package/lib/chain/opPools/opPool.d.ts +3 -3
  144. package/lib/chain/opPools/opPool.d.ts.map +1 -1
  145. package/lib/chain/opPools/opPool.js +7 -7
  146. package/lib/chain/opPools/opPool.js.map +1 -1
  147. package/lib/chain/opPools/utils.d.ts +2 -2
  148. package/lib/chain/opPools/utils.d.ts.map +1 -1
  149. package/lib/chain/opPools/utils.js +1 -1
  150. package/lib/chain/opPools/utils.js.map +1 -1
  151. package/lib/chain/options.d.ts +1 -0
  152. package/lib/chain/options.d.ts.map +1 -1
  153. package/lib/chain/options.js +1 -0
  154. package/lib/chain/options.js.map +1 -1
  155. package/lib/chain/prepareNextSlot.d.ts +2 -2
  156. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  157. package/lib/chain/prepareNextSlot.js +10 -4
  158. package/lib/chain/prepareNextSlot.js.map +1 -1
  159. package/lib/chain/produceBlock/computeNewStateRoot.d.ts +4 -4
  160. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
  161. package/lib/chain/produceBlock/computeNewStateRoot.js +9 -10
  162. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  163. package/lib/chain/produceBlock/produceBlockBody.d.ts +7 -7
  164. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  165. package/lib/chain/produceBlock/produceBlockBody.js +32 -17
  166. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  167. package/lib/chain/regen/interface.d.ts +13 -13
  168. package/lib/chain/regen/interface.d.ts.map +1 -1
  169. package/lib/chain/regen/queued.d.ts +14 -14
  170. package/lib/chain/regen/queued.d.ts.map +1 -1
  171. package/lib/chain/regen/queued.js.map +1 -1
  172. package/lib/chain/regen/regen.d.ts +6 -5
  173. package/lib/chain/regen/regen.d.ts.map +1 -1
  174. package/lib/chain/regen/regen.js +6 -6
  175. package/lib/chain/regen/regen.js.map +1 -1
  176. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +1 -1
  177. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
  178. package/lib/chain/seenCache/seenGossipBlockInput.js +2 -2
  179. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  180. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +1 -1
  181. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -1
  182. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +2 -2
  183. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -1
  184. package/lib/chain/serializeState.d.ts +2 -2
  185. package/lib/chain/serializeState.d.ts.map +1 -1
  186. package/lib/chain/serializeState.js +1 -1
  187. package/lib/chain/serializeState.js.map +1 -1
  188. package/lib/chain/shufflingCache.d.ts +2 -2
  189. package/lib/chain/shufflingCache.d.ts.map +1 -1
  190. package/lib/chain/shufflingCache.js +3 -4
  191. package/lib/chain/shufflingCache.js.map +1 -1
  192. package/lib/chain/stateCache/fifoBlockStateCache.d.ts +6 -6
  193. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -1
  194. package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
  195. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +11 -11
  196. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  197. package/lib/chain/stateCache/persistentCheckpointsCache.js +12 -16
  198. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  199. package/lib/chain/stateCache/types.d.ts +14 -14
  200. package/lib/chain/stateCache/types.d.ts.map +1 -1
  201. package/lib/chain/stateCache/types.js.map +1 -1
  202. package/lib/chain/validation/attesterSlashing.js +3 -3
  203. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  204. package/lib/chain/validation/blobSidecar.js +1 -1
  205. package/lib/chain/validation/blobSidecar.js.map +1 -1
  206. package/lib/chain/validation/block.d.ts.map +1 -1
  207. package/lib/chain/validation/block.js +28 -6
  208. package/lib/chain/validation/block.js.map +1 -1
  209. package/lib/chain/validation/blsToExecutionChange.js +2 -2
  210. package/lib/chain/validation/blsToExecutionChange.js.map +1 -1
  211. package/lib/chain/validation/dataColumnSidecar.d.ts +11 -4
  212. package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
  213. package/lib/chain/validation/dataColumnSidecar.js +185 -6
  214. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  215. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  216. package/lib/chain/validation/executionPayloadBid.js +10 -7
  217. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  218. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
  219. package/lib/chain/validation/executionPayloadEnvelope.js +7 -3
  220. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  221. package/lib/chain/validation/payloadAttestationMessage.js +5 -3
  222. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
  223. package/lib/chain/validation/proposerSlashing.js +1 -1
  224. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  225. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts +2 -2
  226. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -1
  227. package/lib/chain/validation/signatureSets/contributionAndProof.js +1 -1
  228. package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
  229. package/lib/chain/validation/signatureSets/syncCommittee.d.ts +2 -2
  230. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -1
  231. package/lib/chain/validation/signatureSets/syncCommittee.js +1 -1
  232. package/lib/chain/validation/signatureSets/syncCommittee.js.map +1 -1
  233. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts +2 -2
  234. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -1
  235. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js.map +1 -1
  236. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts +2 -2
  237. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -1
  238. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js +1 -1
  239. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js.map +1 -1
  240. package/lib/chain/validation/syncCommittee.d.ts +4 -4
  241. package/lib/chain/validation/syncCommittee.d.ts.map +1 -1
  242. package/lib/chain/validation/syncCommittee.js +17 -12
  243. package/lib/chain/validation/syncCommittee.js.map +1 -1
  244. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
  245. package/lib/chain/validation/syncCommitteeContributionAndProof.js +5 -2
  246. package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
  247. package/lib/chain/validation/voluntaryExit.d.ts.map +1 -1
  248. package/lib/chain/validation/voluntaryExit.js +3 -3
  249. package/lib/chain/validation/voluntaryExit.js.map +1 -1
  250. package/lib/chain/validatorMonitor.d.ts +3 -3
  251. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  252. package/lib/chain/validatorMonitor.js +11 -9
  253. package/lib/chain/validatorMonitor.js.map +1 -1
  254. package/lib/db/buckets.d.ts +2 -2
  255. package/lib/db/buckets.d.ts.map +1 -1
  256. package/lib/db/buckets.js +2 -2
  257. package/lib/db/buckets.js.map +1 -1
  258. package/lib/db/repositories/blockArchiveIndex.d.ts +2 -2
  259. package/lib/db/repositories/blockArchiveIndex.d.ts.map +1 -1
  260. package/lib/db/repositories/dataColumnSidecar.d.ts.map +1 -1
  261. package/lib/db/repositories/dataColumnSidecar.js +4 -2
  262. package/lib/db/repositories/dataColumnSidecar.js.map +1 -1
  263. package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +1 -1
  264. package/lib/db/repositories/dataColumnSidecarArchive.js +4 -2
  265. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
  266. package/lib/metrics/metrics/lodestar.d.ts +32 -4
  267. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  268. package/lib/metrics/metrics/lodestar.js +52 -15
  269. package/lib/metrics/metrics/lodestar.js.map +1 -1
  270. package/lib/network/gossip/encoding.d.ts.map +1 -1
  271. package/lib/network/gossip/encoding.js +15 -0
  272. package/lib/network/gossip/encoding.js.map +1 -1
  273. package/lib/network/interface.d.ts +7 -4
  274. package/lib/network/interface.d.ts.map +1 -1
  275. package/lib/network/libp2p/index.d.ts.map +1 -1
  276. package/lib/network/libp2p/index.js +22 -11
  277. package/lib/network/libp2p/index.js.map +1 -1
  278. package/lib/network/network.d.ts +7 -4
  279. package/lib/network/network.d.ts.map +1 -1
  280. package/lib/network/network.js +12 -3
  281. package/lib/network/network.js.map +1 -1
  282. package/lib/network/options.d.ts.map +1 -1
  283. package/lib/network/options.js +7 -2
  284. package/lib/network/options.js.map +1 -1
  285. package/lib/network/processor/extractSlotRootFns.d.ts +1 -1
  286. package/lib/network/processor/extractSlotRootFns.d.ts.map +1 -1
  287. package/lib/network/processor/extractSlotRootFns.js +25 -5
  288. package/lib/network/processor/extractSlotRootFns.js.map +1 -1
  289. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  290. package/lib/network/processor/gossipHandlers.js +269 -80
  291. package/lib/network/processor/gossipHandlers.js.map +1 -1
  292. package/lib/network/processor/index.d.ts +22 -7
  293. package/lib/network/processor/index.d.ts.map +1 -1
  294. package/lib/network/processor/index.js +313 -80
  295. package/lib/network/processor/index.js.map +1 -1
  296. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -1
  297. package/lib/network/reqresp/ReqRespBeaconNode.js +9 -0
  298. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  299. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
  300. package/lib/network/reqresp/handlers/beaconBlocksByRange.js +2 -1
  301. package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
  302. package/lib/network/reqresp/handlers/beaconBlocksByRoot.d.ts.map +1 -1
  303. package/lib/network/reqresp/handlers/beaconBlocksByRoot.js +2 -0
  304. package/lib/network/reqresp/handlers/beaconBlocksByRoot.js.map +1 -1
  305. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts +2 -2
  306. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +1 -1
  307. package/lib/network/reqresp/handlers/blobSidecarsByRange.js +7 -3
  308. package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +1 -1
  309. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts.map +1 -1
  310. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js +6 -0
  311. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js.map +1 -1
  312. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts +2 -2
  313. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -1
  314. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +7 -3
  315. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -1
  316. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts +8 -0
  317. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts.map +1 -0
  318. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js +70 -0
  319. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js.map +1 -0
  320. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.d.ts +6 -0
  321. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.d.ts.map +1 -0
  322. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js +23 -0
  323. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js.map +1 -0
  324. package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
  325. package/lib/network/reqresp/handlers/index.js +11 -1
  326. package/lib/network/reqresp/handlers/index.js.map +1 -1
  327. package/lib/network/reqresp/protocols.d.ts +2 -0
  328. package/lib/network/reqresp/protocols.d.ts.map +1 -1
  329. package/lib/network/reqresp/protocols.js +10 -0
  330. package/lib/network/reqresp/protocols.js.map +1 -1
  331. package/lib/network/reqresp/rateLimit.d.ts.map +1 -1
  332. package/lib/network/reqresp/rateLimit.js +8 -0
  333. package/lib/network/reqresp/rateLimit.js.map +1 -1
  334. package/lib/network/reqresp/score.d.ts.map +1 -1
  335. package/lib/network/reqresp/score.js +2 -0
  336. package/lib/network/reqresp/score.js.map +1 -1
  337. package/lib/network/reqresp/types.d.ts +10 -4
  338. package/lib/network/reqresp/types.d.ts.map +1 -1
  339. package/lib/network/reqresp/types.js +16 -4
  340. package/lib/network/reqresp/types.js.map +1 -1
  341. package/lib/node/nodejs.d.ts +2 -2
  342. package/lib/node/nodejs.d.ts.map +1 -1
  343. package/lib/node/nodejs.js +3 -3
  344. package/lib/node/nodejs.js.map +1 -1
  345. package/lib/node/notifier.d.ts.map +1 -1
  346. package/lib/node/notifier.js +3 -3
  347. package/lib/node/notifier.js.map +1 -1
  348. package/lib/sync/backfill/backfill.d.ts +2 -2
  349. package/lib/sync/backfill/backfill.d.ts.map +1 -1
  350. package/lib/sync/backfill/backfill.js +2 -2
  351. package/lib/sync/backfill/backfill.js.map +1 -1
  352. package/lib/sync/unknownBlock.d.ts +3 -9
  353. package/lib/sync/unknownBlock.d.ts.map +1 -1
  354. package/lib/sync/unknownBlock.js +10 -43
  355. package/lib/sync/unknownBlock.js.map +1 -1
  356. package/lib/sync/utils/downloadByRange.d.ts +3 -3
  357. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  358. package/lib/sync/utils/downloadByRange.js +4 -2
  359. package/lib/sync/utils/downloadByRange.js.map +1 -1
  360. package/lib/sync/utils/downloadByRoot.d.ts +3 -3
  361. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  362. package/lib/sync/utils/downloadByRoot.js +10 -5
  363. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  364. package/lib/util/blobs.d.ts +3 -3
  365. package/lib/util/blobs.d.ts.map +1 -1
  366. package/lib/util/blobs.js +21 -10
  367. package/lib/util/blobs.js.map +1 -1
  368. package/lib/util/dataColumns.d.ts +18 -11
  369. package/lib/util/dataColumns.d.ts.map +1 -1
  370. package/lib/util/dataColumns.js +51 -17
  371. package/lib/util/dataColumns.js.map +1 -1
  372. package/lib/util/execution.d.ts +6 -2
  373. package/lib/util/execution.d.ts.map +1 -1
  374. package/lib/util/execution.js +49 -25
  375. package/lib/util/execution.js.map +1 -1
  376. package/lib/util/sszBytes.d.ts +25 -1
  377. package/lib/util/sszBytes.d.ts.map +1 -1
  378. package/lib/util/sszBytes.js +189 -2
  379. package/lib/util/sszBytes.js.map +1 -1
  380. package/lib/util/types.d.ts +2 -0
  381. package/lib/util/types.d.ts.map +1 -1
  382. package/lib/util/types.js +1 -0
  383. package/lib/util/types.js.map +1 -1
  384. package/package.json +16 -16
  385. package/src/api/impl/beacon/blocks/index.ts +62 -16
  386. package/src/api/impl/beacon/pool/index.ts +5 -1
  387. package/src/api/impl/beacon/state/index.ts +43 -55
  388. package/src/api/impl/beacon/state/utils.ts +11 -25
  389. package/src/api/impl/debug/index.ts +2 -2
  390. package/src/api/impl/lodestar/index.ts +8 -8
  391. package/src/api/impl/proof/index.ts +2 -9
  392. package/src/api/impl/validator/index.ts +38 -43
  393. package/src/api/impl/validator/utils.ts +4 -7
  394. package/src/chain/ColumnReconstructionTracker.ts +6 -5
  395. package/src/chain/GetBlobsTracker.ts +14 -12
  396. package/src/chain/archiveStore/archiveStore.ts +1 -0
  397. package/src/chain/archiveStore/historicalState/getHistoricalState.ts +10 -39
  398. package/src/chain/archiveStore/historicalState/historicalStateRegen.ts +2 -1
  399. package/src/chain/archiveStore/historicalState/types.ts +2 -0
  400. package/src/chain/archiveStore/historicalState/worker.ts +1 -4
  401. package/src/chain/archiveStore/interface.ts +1 -0
  402. package/src/chain/balancesCache.ts +5 -11
  403. package/src/chain/blocks/blockInput/blockInput.ts +8 -8
  404. package/src/chain/blocks/blockInput/types.ts +5 -4
  405. package/src/chain/blocks/importBlock.ts +50 -31
  406. package/src/chain/blocks/importExecutionPayload.ts +98 -62
  407. package/src/chain/blocks/index.ts +3 -2
  408. package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +53 -12
  409. package/src/chain/blocks/payloadEnvelopeInput/types.ts +2 -1
  410. package/src/chain/blocks/types.ts +26 -15
  411. package/src/chain/blocks/utils/checkpoint.ts +2 -2
  412. package/src/chain/blocks/verifyBlock.ts +5 -10
  413. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +10 -14
  414. package/src/chain/blocks/verifyBlocksSignatures.ts +10 -3
  415. package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +6 -8
  416. package/src/chain/chain.ts +167 -98
  417. package/src/chain/emitter.ts +27 -9
  418. package/src/chain/errors/blockError.ts +11 -5
  419. package/src/chain/errors/dataColumnSidecarError.ts +32 -1
  420. package/src/chain/forkChoice/index.ts +35 -41
  421. package/src/chain/initState.ts +7 -2
  422. package/src/chain/interface.ts +21 -15
  423. package/src/chain/lightClient/index.ts +17 -18
  424. package/src/chain/opPools/aggregatedAttestationPool.ts +20 -21
  425. package/src/chain/opPools/executionPayloadBidPool.ts +3 -3
  426. package/src/chain/opPools/opPool.ts +13 -14
  427. package/src/chain/opPools/utils.ts +3 -3
  428. package/src/chain/options.ts +2 -0
  429. package/src/chain/prepareNextSlot.ts +14 -8
  430. package/src/chain/produceBlock/computeNewStateRoot.ts +13 -16
  431. package/src/chain/produceBlock/produceBlockBody.ts +51 -48
  432. package/src/chain/regen/interface.ts +13 -17
  433. package/src/chain/regen/queued.ts +16 -20
  434. package/src/chain/regen/regen.ts +16 -17
  435. package/src/chain/seenCache/seenGossipBlockInput.ts +2 -2
  436. package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +2 -2
  437. package/src/chain/serializeState.ts +3 -3
  438. package/src/chain/shufflingCache.ts +5 -7
  439. package/src/chain/stateCache/fifoBlockStateCache.ts +7 -7
  440. package/src/chain/stateCache/persistentCheckpointsCache.ts +27 -42
  441. package/src/chain/stateCache/types.ts +14 -18
  442. package/src/chain/validation/attesterSlashing.ts +3 -3
  443. package/src/chain/validation/blobSidecar.ts +1 -1
  444. package/src/chain/validation/block.ts +31 -10
  445. package/src/chain/validation/blsToExecutionChange.ts +2 -2
  446. package/src/chain/validation/dataColumnSidecar.ts +231 -8
  447. package/src/chain/validation/executionPayloadBid.ts +10 -10
  448. package/src/chain/validation/executionPayloadEnvelope.ts +7 -4
  449. package/src/chain/validation/payloadAttestationMessage.ts +6 -4
  450. package/src/chain/validation/proposerSlashing.ts +1 -1
  451. package/src/chain/validation/signatureSets/contributionAndProof.ts +2 -7
  452. package/src/chain/validation/signatureSets/syncCommittee.ts +2 -7
  453. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +2 -2
  454. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +2 -7
  455. package/src/chain/validation/syncCommittee.ts +25 -20
  456. package/src/chain/validation/syncCommitteeContributionAndProof.ts +9 -10
  457. package/src/chain/validation/voluntaryExit.ts +3 -8
  458. package/src/chain/validatorMonitor.ts +15 -13
  459. package/src/db/buckets.ts +2 -2
  460. package/src/db/repositories/dataColumnSidecar.ts +4 -2
  461. package/src/db/repositories/dataColumnSidecarArchive.ts +4 -2
  462. package/src/metrics/metrics/lodestar.ts +57 -19
  463. package/src/network/gossip/encoding.ts +16 -0
  464. package/src/network/interface.ts +18 -4
  465. package/src/network/libp2p/index.ts +24 -13
  466. package/src/network/network.ts +39 -8
  467. package/src/network/options.ts +7 -2
  468. package/src/network/processor/extractSlotRootFns.ts +32 -6
  469. package/src/network/processor/gossipHandlers.ts +334 -94
  470. package/src/network/processor/index.ts +395 -92
  471. package/src/network/reqresp/ReqRespBeaconNode.ts +13 -0
  472. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +3 -1
  473. package/src/network/reqresp/handlers/beaconBlocksByRoot.ts +3 -0
  474. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +15 -3
  475. package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +11 -0
  476. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +19 -3
  477. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRange.ts +96 -0
  478. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRoot.ts +34 -0
  479. package/src/network/reqresp/handlers/index.ts +12 -0
  480. package/src/network/reqresp/protocols.ts +12 -0
  481. package/src/network/reqresp/rateLimit.ts +18 -0
  482. package/src/network/reqresp/score.ts +2 -0
  483. package/src/network/reqresp/types.ts +26 -5
  484. package/src/node/nodejs.ts +6 -5
  485. package/src/node/notifier.ts +5 -6
  486. package/src/sync/backfill/backfill.ts +3 -3
  487. package/src/sync/unknownBlock.ts +13 -53
  488. package/src/sync/utils/downloadByRange.ts +9 -7
  489. package/src/sync/utils/downloadByRoot.ts +16 -12
  490. package/src/util/blobs.ts +35 -15
  491. package/src/util/dataColumns.ts +69 -25
  492. package/src/util/execution.ts +49 -30
  493. package/src/util/sszBytes.ts +245 -3
  494. package/src/util/types.ts +6 -0
@@ -1,5 +1,5 @@
1
1
  import {routes} from "@lodestar/api";
2
- import {CachedBeaconStateAllForks} from "@lodestar/state-transition";
2
+ import {IBeaconStateView} from "@lodestar/state-transition";
3
3
  import {RootHex} from "@lodestar/types";
4
4
  import {toRootHex} from "@lodestar/utils";
5
5
  import {Metrics} from "../../metrics/index.js";
@@ -48,7 +48,7 @@ export const DEFAULT_MAX_BLOCK_STATES_GLOAS = 128;
48
48
  export class FIFOBlockStateCache implements BlockStateCache {
49
49
  private maxStates: number;
50
50
 
51
- private readonly cache: MapTracker<string, CachedBeaconStateAllForks>;
51
+ private readonly cache: MapTracker<string, IBeaconStateView>;
52
52
  /**
53
53
  * Key order to implement FIFO cache
54
54
  */
@@ -68,7 +68,7 @@ export class FIFOBlockStateCache implements BlockStateCache {
68
68
  /**
69
69
  * Set a state as head, happens when importing a block and head block is changed.
70
70
  */
71
- setHeadState(item: CachedBeaconStateAllForks | null): void {
71
+ setHeadState(item: IBeaconStateView | null): void {
72
72
  if (item !== null) {
73
73
  this.add(item, true);
74
74
  }
@@ -79,7 +79,7 @@ export class FIFOBlockStateCache implements BlockStateCache {
79
79
  * base merkle tree for all BeaconState objects across application.
80
80
  * See packages/state-transition/src/util/loadState/loadState.ts for more detail
81
81
  */
82
- getSeedState(): CachedBeaconStateAllForks {
82
+ getSeedState(): IBeaconStateView {
83
83
  const firstValue = this.cache.values().next();
84
84
  if (firstValue.done) {
85
85
  // should not happen
@@ -94,7 +94,7 @@ export class FIFOBlockStateCache implements BlockStateCache {
94
94
  /**
95
95
  * Get a state from this cache given a state root hex.
96
96
  */
97
- get(rootHex: RootHex): CachedBeaconStateAllForks | null {
97
+ get(rootHex: RootHex): IBeaconStateView | null {
98
98
  this.metrics?.lookups.inc();
99
99
  const item = this.cache.get(rootHex);
100
100
  if (!item) {
@@ -112,7 +112,7 @@ export class FIFOBlockStateCache implements BlockStateCache {
112
112
  * @param isHead if true, move it to the head of the list. Otherwise add to the 2nd position.
113
113
  * In importBlock() steps, normally it'll call add() with isHead = false first. Then call setHeadState() to set the head.
114
114
  */
115
- add(item: CachedBeaconStateAllForks, isHead = false): void {
115
+ add(item: IBeaconStateView, isHead = false): void {
116
116
  const key = toRootHex(item.hashTreeRoot());
117
117
  if (this.cache.get(key) != null) {
118
118
  if (!this.keyOrder.has(key)) {
@@ -200,7 +200,7 @@ export class FIFOBlockStateCache implements BlockStateCache {
200
200
  }));
201
201
  }
202
202
 
203
- getStates(): IterableIterator<CachedBeaconStateAllForks> {
203
+ getStates(): IterableIterator<IBeaconStateView> {
204
204
  return this.cache.values();
205
205
  }
206
206
 
@@ -1,12 +1,7 @@
1
1
  import {routes} from "@lodestar/api";
2
2
  import {BeaconConfig} from "@lodestar/config";
3
3
  import {CheckpointWithPayloadStatus} from "@lodestar/fork-choice";
4
- import {
5
- CachedBeaconStateAllForks,
6
- computeStartSlotAtEpoch,
7
- getBlockRootAtSlot,
8
- loadCachedBeaconState,
9
- } from "@lodestar/state-transition";
4
+ import {IBeaconStateView, computeStartSlotAtEpoch} from "@lodestar/state-transition";
10
5
  import {Epoch, RootHex, phase0} from "@lodestar/types";
11
6
  import {Logger, MapDef, fromHex, sleep, toHex, toRootHex} from "@lodestar/utils";
12
7
  import {Metrics} from "../../metrics/index.js";
@@ -40,7 +35,7 @@ type CacheKey = string;
40
35
 
41
36
  type InMemoryCacheItem = {
42
37
  type: CacheItemType.inMemory;
43
- state: CachedBeaconStateAllForks;
38
+ state: IBeaconStateView;
44
39
  // if a cp state is reloaded from disk, it'll keep track of persistedKey to allow us to remove it from disk later
45
40
  // it also helps not to persist it again
46
41
  persistedKey?: DatastoreKey;
@@ -220,9 +215,9 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
220
215
  * - Get block for processing
221
216
  * - Regen head state
222
217
  */
223
- async getOrReload(cp: CheckpointHexPayload): Promise<CachedBeaconStateAllForks | null> {
218
+ async getOrReload(cp: CheckpointHexPayload): Promise<IBeaconStateView | null> {
224
219
  const stateOrStateBytesData = await this.getStateOrLoadDb(cp);
225
- if (stateOrStateBytesData === null || isCachedBeaconState(stateOrStateBytesData)) {
220
+ if (stateOrStateBytesData === null || isBeaconStateView(stateOrStateBytesData)) {
226
221
  return stateOrStateBytesData ?? null;
227
222
  }
228
223
  const {persistedKey, stateBytes} = stateOrStateBytesData;
@@ -237,7 +232,7 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
237
232
  this.clock?.secFromSlot(this.clock?.currentSlot ?? 0) ?? 0
238
233
  );
239
234
  const seedState = this.findSeedStateToReload(cp);
240
- this.metrics?.cpStateCache.stateReloadEpochDiff.observe(Math.abs(seedState.epochCtx.epoch - cp.epoch));
235
+ this.metrics?.cpStateCache.stateReloadEpochDiff.observe(Math.abs(seedState.epoch - cp.epoch));
241
236
  this.logger.debug("Reload: found seed state", {...logMeta, seedSlot: seedState.slot});
242
237
 
243
238
  try {
@@ -249,19 +244,16 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
249
244
  if (validatorsBytes == null) {
250
245
  // fallback logic in case we can't use the buffer pool
251
246
  this.metrics?.cpStateCache.stateReloadValidatorsSerializeAllocCount.inc();
252
- validatorsBytes = seedState.validators.serialize();
247
+ validatorsBytes = seedState.serializeValidators();
253
248
  }
254
249
  sszTimer?.();
255
250
  const timer = this.metrics?.cpStateCache.stateReloadDuration.startTimer();
256
- const newCachedState = loadCachedBeaconState(seedState, stateBytes, {}, validatorsBytes);
251
+ const newCachedState = seedState.loadOtherState(stateBytes, validatorsBytes);
257
252
  // hashTreeRoot() calls the commit() inside
258
253
  // there is no modification inside the state, it's just that we want to compute and cache all roots
259
254
  const stateRoot = toRootHex(newCachedState.hashTreeRoot());
260
255
  timer?.();
261
256
 
262
- // load all cache in order for consumers (usually regen.getState()) to process blocks faster
263
- newCachedState.validators.getAllReadonlyValues();
264
- newCachedState.balances.getAll();
265
257
  this.logger.debug("Reload: cached state load successful", {
266
258
  ...logMeta,
267
259
  stateSlot: newCachedState.slot,
@@ -284,9 +276,9 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
284
276
  /**
285
277
  * Return either state or state bytes loaded from db.
286
278
  */
287
- async getStateOrBytes(cp: CheckpointHexPayload): Promise<CachedBeaconStateAllForks | Uint8Array | null> {
279
+ async getStateOrBytes(cp: CheckpointHexPayload): Promise<IBeaconStateView | Uint8Array | null> {
288
280
  const stateOrLoadedState = await this.getStateOrLoadDb(cp);
289
- if (stateOrLoadedState === null || isCachedBeaconState(stateOrLoadedState)) {
281
+ if (stateOrLoadedState === null || isBeaconStateView(stateOrLoadedState)) {
290
282
  return stateOrLoadedState;
291
283
  }
292
284
  return stateOrLoadedState.stateBytes;
@@ -295,7 +287,7 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
295
287
  /**
296
288
  * Return either state or state bytes with persisted key loaded from db.
297
289
  */
298
- async getStateOrLoadDb(cp: CheckpointHexPayload): Promise<CachedBeaconStateAllForks | LoadedStateBytesData | null> {
290
+ async getStateOrLoadDb(cp: CheckpointHexPayload): Promise<IBeaconStateView | LoadedStateBytesData | null> {
299
291
  const cpKey = toCacheKey(cp);
300
292
  const inMemoryState = this.get(cpKey);
301
293
  if (inMemoryState) {
@@ -326,7 +318,7 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
326
318
  /**
327
319
  * Similar to get() api without reloading from disk
328
320
  */
329
- get(cpOrKey: CheckpointHexPayload | CacheKey): CachedBeaconStateAllForks | null {
321
+ get(cpOrKey: CheckpointHexPayload | CacheKey): IBeaconStateView | null {
330
322
  this.metrics?.cpStateCache.lookups.inc();
331
323
  const cpKey = typeof cpOrKey === "string" ? cpOrKey : toCacheKey(cpOrKey);
332
324
  const cacheItem = this.cache.get(cpKey);
@@ -355,7 +347,7 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
355
347
  * @param payloadPresent - For Gloas: true if this is payload state, false if block state.
356
348
  * Always true for pre-Gloas.
357
349
  */
358
- add(cp: phase0.Checkpoint, state: CachedBeaconStateAllForks, payloadPresent: boolean): void {
350
+ add(cp: phase0.Checkpoint, state: IBeaconStateView, payloadPresent: boolean): void {
359
351
  const cpHex = toCheckpointHexPayload(cp, payloadPresent);
360
352
  const key = toCacheKey(cpHex);
361
353
  const cacheItem = this.cache.get(key);
@@ -385,7 +377,7 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
385
377
  /**
386
378
  * Searches in-memory state for the latest cached state with a `root` without reload, starting with `epoch` and descending
387
379
  */
388
- getLatest(rootHex: RootHex, maxEpoch: Epoch, payloadPresent: boolean): CachedBeaconStateAllForks | null {
380
+ getLatest(rootHex: RootHex, maxEpoch: Epoch, payloadPresent: boolean): IBeaconStateView | null {
389
381
  // sort epochs in descending order, only consider epochs lte `epoch`
390
382
  const epochs = Array.from(this.epochIndex.keys())
391
383
  .sort((a, b) => b - a)
@@ -412,7 +404,7 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
412
404
  rootHex: RootHex,
413
405
  maxEpoch: Epoch,
414
406
  payloadPresent: boolean
415
- ): Promise<CachedBeaconStateAllForks | null> {
407
+ ): Promise<IBeaconStateView | null> {
416
408
  // sort epochs in descending order, only consider epochs lte `epoch`
417
409
  const epochs = Array.from(this.epochIndex.keys())
418
410
  .sort((a, b) => b - a)
@@ -518,7 +510,7 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
518
510
  * For Gloas: Processes both block state and payload state variants together. The decision of which roots to persist/prune
519
511
  * is based on root canonicality (from state's view), not payload presence. Both variants are managed as a unit.
520
512
  */
521
- async processState(blockRootHex: RootHex, state: CachedBeaconStateAllForks): Promise<number> {
513
+ async processState(blockRootHex: RootHex, state: IBeaconStateView): Promise<number> {
522
514
  let persistCount = 0;
523
515
  // it's important to sort the epochs in ascending order, in case of big reorg we always want to keep the most recent checkpoint states
524
516
  const sortedEpochs = Array.from(this.epochIndex.keys()).sort((a, b) => a - b);
@@ -587,10 +579,10 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
587
579
  *
588
580
  * Use seed state from the block cache if cannot find any seed states within this cache.
589
581
  */
590
- findSeedStateToReload(reloadedCp: CheckpointHexPayload): CachedBeaconStateAllForks {
582
+ findSeedStateToReload(reloadedCp: CheckpointHexPayload): IBeaconStateView {
591
583
  const maxEpoch = Math.max(...Array.from(this.epochIndex.keys()));
592
584
  const reloadedCpSlot = computeStartSlotAtEpoch(reloadedCp.epoch);
593
- let firstState: CachedBeaconStateAllForks | null = null;
585
+ let firstState: IBeaconStateView | null = null;
594
586
  const logCtx = {reloadedCpEpoch: reloadedCp.epoch, reloadedCpRoot: reloadedCp.rootHex};
595
587
 
596
588
  // no need to check epochs before `maxEpoch - this.maxEpochsInMemory + 1` before they are all persisted
@@ -620,7 +612,7 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
620
612
  // amongst states of the same epoch, choose the one with the same view of reloadedCp
621
613
  if (
622
614
  reloadedCpSlot < state.slot &&
623
- toRootHex(getBlockRootAtSlot(state, reloadedCpSlot)) === reloadedCp.rootHex
615
+ toRootHex(state.getBlockRootAtSlot(reloadedCpSlot)) === reloadedCp.rootHex
624
616
  ) {
625
617
  this.logger.verbose("Reload: use checkpoint state as seed state", {...cpLog, ...logCtx});
626
618
  return state;
@@ -685,7 +677,7 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
685
677
  });
686
678
  }
687
679
 
688
- getStates(): IterableIterator<CachedBeaconStateAllForks> {
680
+ getStates(): IterableIterator<IBeaconStateView> {
689
681
  const items = Array.from(this.cache.values())
690
682
  .filter(isInMemoryCacheItem)
691
683
  .map((item) => item.state);
@@ -735,17 +727,13 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
735
727
  * - In normal condition, we persist 1 checkpoint state per epoch.
736
728
  * - In reorged condition, we may persist multiple (most likely 2) checkpoint states per epoch.
737
729
  */
738
- private async processPastEpoch(
739
- blockRootHex: RootHex,
740
- state: CachedBeaconStateAllForks,
741
- epoch: Epoch
742
- ): Promise<number> {
730
+ private async processPastEpoch(blockRootHex: RootHex, state: IBeaconStateView, epoch: Epoch): Promise<number> {
743
731
  let persistCount = 0;
744
732
  const epochBoundarySlot = computeStartSlotAtEpoch(epoch);
745
733
  const epochBoundaryRoot =
746
- epochBoundarySlot === state.slot ? fromHex(blockRootHex) : getBlockRootAtSlot(state, epochBoundarySlot);
734
+ epochBoundarySlot === state.slot ? fromHex(blockRootHex) : state.getBlockRootAtSlot(epochBoundarySlot);
747
735
  const epochBoundaryHex = toRootHex(epochBoundaryRoot);
748
- const prevEpochRoot = toRootHex(getBlockRootAtSlot(state, epochBoundarySlot - 1));
736
+ const prevEpochRoot = toRootHex(state.getBlockRootAtSlot(epochBoundarySlot - 1));
749
737
 
750
738
  // for each epoch, usually there are 2 rootHexes respective to the 2 checkpoint states: Previous Root Checkpoint State and Current Root Checkpoint State
751
739
  const cpRootHexMap = this.epochIndex.get(epoch) ?? new Map<RootHex, number>();
@@ -912,15 +900,14 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
912
900
  * - Also `serializeState.test.ts` perf test shows a lot of differences allocating validators bytes once vs every time,
913
901
  * This is 2x - 3x faster than allocating memory every time.
914
902
  */
915
- private serializeStateValidators(state: CachedBeaconStateAllForks): BufferWithKey | null {
916
- const type = state.type.fields.validators;
917
- const size = type.tree_serializedSize(state.validators.node);
903
+ private serializeStateValidators(state: IBeaconStateView): BufferWithKey | null {
904
+ const size = state.serializedValidatorsSize();
918
905
  if (this.bufferPool) {
919
906
  const bufferWithKey = this.bufferPool.alloc(size, AllocSource.PERSISTENT_CHECKPOINTS_CACHE_VALIDATORS);
920
907
  if (bufferWithKey) {
921
908
  const validatorsBytes = bufferWithKey.buffer;
922
909
  const dataView = new DataView(validatorsBytes.buffer, validatorsBytes.byteOffset, validatorsBytes.byteLength);
923
- state.validators.serializeToBytes({uint8Array: validatorsBytes, dataView}, 0);
910
+ state.serializeValidatorsToBytes({uint8Array: validatorsBytes, dataView}, 0);
924
911
  return bufferWithKey;
925
912
  }
926
913
  }
@@ -983,10 +970,8 @@ function fromCacheKey(key: CacheKey): CheckpointHexPayload {
983
970
  };
984
971
  }
985
972
 
986
- function isCachedBeaconState(
987
- stateOrBytes: CachedBeaconStateAllForks | LoadedStateBytesData
988
- ): stateOrBytes is CachedBeaconStateAllForks {
989
- return (stateOrBytes as CachedBeaconStateAllForks).slot !== undefined;
973
+ function isBeaconStateView(stateOrBytes: IBeaconStateView | LoadedStateBytesData): stateOrBytes is IBeaconStateView {
974
+ return (stateOrBytes as IBeaconStateView).slot !== undefined;
990
975
  }
991
976
 
992
977
  function isInMemoryCacheItem(cacheItem: CacheItem): cacheItem is InMemoryCacheItem {
@@ -1,5 +1,5 @@
1
1
  import {routes} from "@lodestar/api";
2
- import {CachedBeaconStateAllForks} from "@lodestar/state-transition";
2
+ import {IBeaconStateView} from "@lodestar/state-transition";
3
3
  import {Epoch, RootHex, phase0} from "@lodestar/types";
4
4
 
5
5
  /**
@@ -24,13 +24,13 @@ export type CheckpointHexPayload = {epoch: Epoch; rootHex: RootHex; payloadPrese
24
24
  * The cache key is state root
25
25
  */
26
26
  export interface BlockStateCache {
27
- get(rootHex: RootHex): CachedBeaconStateAllForks | null;
28
- add(item: CachedBeaconStateAllForks): void;
29
- setHeadState(item: CachedBeaconStateAllForks | null): void;
27
+ get(rootHex: RootHex): IBeaconStateView | null;
28
+ add(item: IBeaconStateView): void;
29
+ setHeadState(item: IBeaconStateView | null): void;
30
30
  /**
31
31
  * Get a seed state for state reload.
32
32
  */
33
- getSeedState(): CachedBeaconStateAllForks;
33
+ getSeedState(): IBeaconStateView;
34
34
  clear(): void;
35
35
  size: number;
36
36
  prune(headStateRootHex: RootHex): void;
@@ -39,7 +39,7 @@ export interface BlockStateCache {
39
39
  upgradeToGloas(): void;
40
40
  dumpSummary(): routes.lodestar.StateCacheItem[];
41
41
  /** Expose beacon states stored in cache. Use with caution */
42
- getStates(): IterableIterator<CachedBeaconStateAllForks>;
42
+ getStates(): IterableIterator<IBeaconStateView>;
43
43
  }
44
44
 
45
45
  /**
@@ -65,24 +65,20 @@ export interface BlockStateCache {
65
65
  */
66
66
  export interface CheckpointStateCache {
67
67
  init?: () => Promise<void>;
68
- getOrReload(cp: CheckpointHexPayload): Promise<CachedBeaconStateAllForks | null>;
69
- getStateOrBytes(cp: CheckpointHexPayload): Promise<CachedBeaconStateAllForks | Uint8Array | null>;
70
- get(cpOrKey: CheckpointHexPayload | string): CachedBeaconStateAllForks | null;
71
- add(cp: phase0.Checkpoint, state: CachedBeaconStateAllForks, payloadPresent: boolean): void;
72
- getLatest(rootHex: RootHex, maxEpoch: Epoch, payloadPresent: boolean): CachedBeaconStateAllForks | null;
73
- getOrReloadLatest(
74
- rootHex: RootHex,
75
- maxEpoch: Epoch,
76
- payloadPresent: boolean
77
- ): Promise<CachedBeaconStateAllForks | null>;
68
+ getOrReload(cp: CheckpointHexPayload): Promise<IBeaconStateView | null>;
69
+ getStateOrBytes(cp: CheckpointHexPayload): Promise<IBeaconStateView | Uint8Array | null>;
70
+ get(cpOrKey: CheckpointHexPayload | string): IBeaconStateView | null;
71
+ add(cp: phase0.Checkpoint, state: IBeaconStateView, payloadPresent: boolean): void;
72
+ getLatest(rootHex: RootHex, maxEpoch: Epoch, payloadPresent: boolean): IBeaconStateView | null;
73
+ getOrReloadLatest(rootHex: RootHex, maxEpoch: Epoch, payloadPresent: boolean): Promise<IBeaconStateView | null>;
78
74
  updatePreComputedCheckpoint(rootHex: RootHex, epoch: Epoch, payloadPresent: boolean): number | null;
79
75
  prune(finalizedEpoch: Epoch, justifiedEpoch: Epoch): void;
80
76
  pruneFinalized(finalizedEpoch: Epoch): void;
81
- processState(blockRootHex: RootHex, state: CachedBeaconStateAllForks): Promise<number>;
77
+ processState(blockRootHex: RootHex, state: IBeaconStateView): Promise<number>;
82
78
  clear(): void;
83
79
  dumpSummary(): routes.lodestar.StateCacheItem[];
84
80
  /** Expose beacon states stored in cache. Use with caution */
85
- getStates(): IterableIterator<CachedBeaconStateAllForks>;
81
+ getStates(): IterableIterator<IBeaconStateView>;
86
82
  }
87
83
 
88
84
  export enum CacheItemType {
@@ -48,7 +48,7 @@ export async function validateAttesterSlashing(
48
48
  chain.config,
49
49
  chain.pubkeyCache,
50
50
  state.slot,
51
- state.validators.length,
51
+ state.validatorCount,
52
52
  attesterSlashing,
53
53
  false
54
54
  );
@@ -59,8 +59,8 @@ export async function validateAttesterSlashing(
59
59
  });
60
60
  }
61
61
 
62
- const currentEpoch = state.epochCtx.epoch;
63
- if (!intersectingIndices.some((index) => isSlashableValidator(state.validators.getReadonly(index), currentEpoch))) {
62
+ const currentEpoch = state.epoch;
63
+ if (!intersectingIndices.some((index) => isSlashableValidator(state.getValidator(index), currentEpoch))) {
64
64
  throw new AttesterSlashingError(GossipAction.REJECT, {
65
65
  code: AttesterSlashingErrorCode.INVALID,
66
66
  error: Error("AttesterSlashing has no slashable validators"),
@@ -176,7 +176,7 @@ export async function validateGossipBlobSidecar(
176
176
  // MAY be queued for later processing while proposers for the block's branch are calculated -- in such
177
177
  // a case _do not_ `REJECT`, instead `IGNORE` this message.
178
178
  const proposerIndex = blobSidecar.signedBlockHeader.message.proposerIndex;
179
- if (blockState.epochCtx.getBeaconProposer(blobSlot) !== proposerIndex) {
179
+ if (blockState.getBeaconProposer(blobSlot) !== proposerIndex) {
180
180
  throw new BlobSidecarGossipError(GossipAction.REJECT, {
181
181
  code: BlobSidecarErrorCode.INCORRECT_PROPOSER,
182
182
  proposerIndex,
@@ -1,4 +1,5 @@
1
1
  import {ChainForkConfig} from "@lodestar/config";
2
+ import {ExecutionStatus} from "@lodestar/fork-choice";
2
3
  import {ForkName, isForkPostBellatrix, isForkPostDeneb, isForkPostGloas} from "@lodestar/params";
3
4
  import {
4
5
  computeEpochAtSlot,
@@ -6,8 +7,7 @@ import {
6
7
  computeTimeAtSlot,
7
8
  getBlockProposerSignatureSet,
8
9
  isExecutionBlockBodyType,
9
- isExecutionEnabled,
10
- isExecutionStateType,
10
+ isStatePostBellatrix,
11
11
  } from "@lodestar/state-transition";
12
12
  import {SignedBeaconBlock, deneb, gloas, isGloasBeaconBlock} from "@lodestar/types";
13
13
  import {byteArrayEquals, sleep, toRootHex} from "@lodestar/utils";
@@ -72,12 +72,7 @@ export async function validateGossipBlock(
72
72
  // [REJECT] The current finalized_checkpoint is an ancestor of block -- i.e.
73
73
  // get_ancestor(store, block.parent_root, compute_start_slot_at_epoch(store.finalized_checkpoint.epoch)) == store.finalized_checkpoint.root
74
74
  const parentRoot = toRootHex(block.parentRoot);
75
- const parentBlock = isGloasBeaconBlock(block)
76
- ? chain.forkChoice.getBlockHexAndBlockHash(
77
- parentRoot,
78
- toRootHex(block.body.signedExecutionPayloadBid.message.parentBlockHash)
79
- )
80
- : chain.forkChoice.getBlockHexDefaultStatus(parentRoot);
75
+ const parentBlock = chain.forkChoice.getBlockHexDefaultStatus(parentRoot);
81
76
  if (parentBlock === null) {
82
77
  // If fork choice does *not* consider the parent to be a descendant of the finalized block,
83
78
  // then there are two more cases:
@@ -92,6 +87,27 @@ export async function validateGossipBlock(
92
87
  throw new BlockGossipError(GossipAction.IGNORE, {code: BlockErrorCode.PARENT_UNKNOWN, parentRoot});
93
88
  }
94
89
 
90
+ // [IGNORE] The block's parent (defined by `block.parent_root`) passes all validation
91
+ // (including execution node verification of the `block.body.execution_payload`)
92
+ if (isForkPostBellatrix(fork) && parentBlock.executionStatus === ExecutionStatus.Invalid) {
93
+ throw new BlockGossipError(GossipAction.IGNORE, {
94
+ code: BlockErrorCode.PARENT_EXECUTION_INVALID,
95
+ parentRoot,
96
+ });
97
+ }
98
+
99
+ // [IGNORE] The block's parent execution payload (defined by bid.parent_block_hash) has been seen
100
+ // (via gossip or non-gossip sources) (a client MAY queue blocks for processing once the parent payload is retrieved).
101
+ if (isGloasBeaconBlock(block)) {
102
+ const parentBlockHashHex = toRootHex(block.body.signedExecutionPayloadBid.message.parentBlockHash);
103
+ if (chain.forkChoice.getBlockHexAndBlockHash(parentRoot, parentBlockHashHex) === null) {
104
+ throw new BlockGossipError(GossipAction.IGNORE, {
105
+ code: BlockErrorCode.PARENT_PAYLOAD_UNKNOWN,
106
+ parentBlockHash: parentBlockHashHex,
107
+ });
108
+ }
109
+ }
110
+
95
111
  // [IGNORE] The attestation head block is too far behind the attestation slot, causing many skip slots.
96
112
  // This is deemed a DoS risk because we need to get the proposerShuffling. To get the shuffling we have
97
113
  // to do a bunch of epoch transitions, the longer the distance between the parent and block,
@@ -176,7 +192,7 @@ export async function validateGossipBlock(
176
192
  if (isForkPostBellatrix(fork) && !isForkPostGloas(fork)) {
177
193
  if (!isExecutionBlockBodyType(block.body)) throw Error("Not execution block body type");
178
194
  const executionPayload = block.body.executionPayload;
179
- if (isExecutionStateType(blockState) && isExecutionEnabled(blockState, block)) {
195
+ if (isStatePostBellatrix(blockState) && blockState.isExecutionStateType && blockState.isExecutionEnabled(block)) {
180
196
  const expectedTimestamp = computeTimeAtSlot(config, blockSlot, chain.genesisTime);
181
197
  if (executionPayload.timestamp !== computeTimeAtSlot(config, blockSlot, chain.genesisTime)) {
182
198
  throw new BlockGossipError(GossipAction.REJECT, {
@@ -188,6 +204,11 @@ export async function validateGossipBlock(
188
204
  }
189
205
  }
190
206
 
207
+ // [REJECT] The proposer index is a valid validator index
208
+ if (proposerIndex >= blockState.validatorCount) {
209
+ throw new BlockGossipError(GossipAction.REJECT, {code: BlockErrorCode.UNKNOWN_PROPOSER, proposerIndex});
210
+ }
211
+
191
212
  // [REJECT] The proposer signature, signed_beacon_block.signature, is valid with respect to the proposer_index pubkey.
192
213
  if (!chain.seenBlockInputCache.isVerifiedProposerSignature(blockSlot, blockRoot, signedBlock.signature)) {
193
214
  const signatureSet = getBlockProposerSignatureSet(chain.config, signedBlock);
@@ -206,7 +227,7 @@ export async function validateGossipBlock(
206
227
  // shuffling (defined by parent_root/slot). If the proposer_index cannot immediately be verified against the expected
207
228
  // shuffling, the block MAY be queued for later processing while proposers for the block's branch are calculated --
208
229
  // in such a case do not REJECT, instead IGNORE this message.
209
- if (blockState.epochCtx.getBeaconProposer(blockSlot) !== proposerIndex) {
230
+ if (blockState.getBeaconProposer(blockSlot) !== proposerIndex) {
210
231
  throw new BlockGossipError(GossipAction.REJECT, {code: BlockErrorCode.INCORRECT_PROPOSER, proposerIndex});
211
232
  }
212
233
 
@@ -39,12 +39,12 @@ async function validateBlsToExecutionChange(
39
39
  const state = chain.getHeadState();
40
40
  const {config} = chain;
41
41
  const addressChange = blsToExecutionChange.message;
42
- if (addressChange.validatorIndex >= state.validators.length) {
42
+ if (addressChange.validatorIndex >= state.validatorCount) {
43
43
  throw new BlsToExecutionChangeError(GossipAction.REJECT, {
44
44
  code: BlsToExecutionChangeErrorCode.INVALID,
45
45
  });
46
46
  }
47
- const validator = state.validators.getReadonly(addressChange.validatorIndex);
47
+ const validator = state.getValidator(addressChange.validatorIndex);
48
48
  // [REJECT] All of the conditions within process_bls_to_execution_change pass validation.
49
49
  // verifySignature = false, verified in batch below
50
50
  const {valid} = isValidBlsToExecutionChange(config, validator, blsToExecutionChange, false);