@lodestar/beacon-node 1.35.0-dev.47c570ab76 → 1.35.0-dev.497d67cb8a

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 (964) hide show
  1. package/lib/api/impl/api.d.ts.map +1 -0
  2. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -0
  3. package/lib/api/impl/beacon/blocks/index.js +8 -2
  4. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  5. package/lib/api/impl/beacon/blocks/utils.d.ts.map +1 -0
  6. package/lib/api/impl/beacon/index.d.ts.map +1 -0
  7. package/lib/api/impl/beacon/pool/index.d.ts.map +1 -0
  8. package/lib/api/impl/beacon/rewards/index.d.ts.map +1 -0
  9. package/lib/api/impl/beacon/state/index.d.ts.map +1 -0
  10. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -0
  11. package/lib/api/impl/config/constants.d.ts +9 -9
  12. package/lib/api/impl/config/constants.d.ts.map +1 -0
  13. package/lib/api/impl/config/constants.js +16 -9
  14. package/lib/api/impl/config/constants.js.map +1 -1
  15. package/lib/api/impl/config/index.d.ts.map +1 -0
  16. package/lib/api/impl/debug/index.d.ts.map +1 -0
  17. package/lib/api/impl/errors.d.ts.map +1 -0
  18. package/lib/api/impl/events/index.d.ts.map +1 -0
  19. package/lib/api/impl/index.d.ts.map +1 -0
  20. package/lib/api/impl/lightclient/index.d.ts.map +1 -0
  21. package/lib/api/impl/lodestar/index.d.ts.map +1 -0
  22. package/lib/api/impl/lodestar/index.js +1 -1
  23. package/lib/api/impl/lodestar/index.js.map +1 -1
  24. package/lib/api/impl/node/index.d.ts.map +1 -0
  25. package/lib/api/impl/node/utils.d.ts.map +1 -0
  26. package/lib/api/impl/proof/index.d.ts.map +1 -0
  27. package/lib/api/impl/types.d.ts.map +1 -0
  28. package/lib/api/impl/utils.d.ts.map +1 -0
  29. package/lib/api/impl/validator/index.d.ts.map +1 -0
  30. package/lib/api/impl/validator/index.js +24 -33
  31. package/lib/api/impl/validator/index.js.map +1 -1
  32. package/lib/api/impl/validator/utils.d.ts.map +1 -0
  33. package/lib/api/index.d.ts.map +1 -0
  34. package/lib/api/options.d.ts.map +1 -0
  35. package/lib/api/rest/activeSockets.d.ts.map +1 -0
  36. package/lib/api/rest/base.d.ts.map +1 -0
  37. package/lib/api/rest/index.d.ts.map +1 -0
  38. package/lib/api/rest/swaggerUI.d.ts.map +1 -0
  39. package/lib/bun-wrappers/prometheus-gc-stats.d.ts.map +1 -0
  40. package/lib/chain/ColumnReconstructionTracker.d.ts.map +1 -0
  41. package/lib/chain/GetBlobsTracker.d.ts.map +1 -0
  42. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -0
  43. package/lib/chain/archiveStore/constants.d.ts.map +1 -0
  44. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +1 -0
  45. package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts.map +1 -0
  46. package/lib/chain/archiveStore/historicalState/metrics.d.ts.map +1 -0
  47. package/lib/chain/archiveStore/historicalState/types.d.ts.map +1 -0
  48. package/lib/chain/archiveStore/historicalState/worker.d.ts.map +1 -0
  49. package/lib/chain/archiveStore/historicalState/worker.js +1 -1
  50. package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
  51. package/lib/chain/archiveStore/index.d.ts.map +1 -0
  52. package/lib/chain/archiveStore/interface.d.ts.map +1 -0
  53. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts.map +1 -0
  54. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -0
  55. package/lib/chain/archiveStore/utils/pruneHistory.d.ts.map +1 -0
  56. package/lib/chain/archiveStore/utils/updateBackfillRange.d.ts.map +1 -0
  57. package/lib/chain/balancesCache.d.ts.map +1 -0
  58. package/lib/chain/beaconProposerCache.d.ts.map +1 -0
  59. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -0
  60. package/lib/chain/blocks/blockInput/blockInput.js +3 -2
  61. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  62. package/lib/chain/blocks/blockInput/errors.d.ts.map +1 -0
  63. package/lib/chain/blocks/blockInput/index.d.ts.map +1 -0
  64. package/lib/chain/blocks/blockInput/types.d.ts.map +1 -0
  65. package/lib/chain/blocks/blockInput/utils.d.ts.map +1 -0
  66. package/lib/chain/blocks/importBlock.d.ts.map +1 -0
  67. package/lib/chain/blocks/importBlock.js +7 -6
  68. package/lib/chain/blocks/importBlock.js.map +1 -1
  69. package/lib/chain/blocks/index.d.ts.map +1 -0
  70. package/lib/chain/blocks/types.d.ts.map +1 -0
  71. package/lib/chain/blocks/utils/blowfishBanner.d.ts.map +1 -0
  72. package/lib/chain/blocks/utils/chainSegment.d.ts.map +1 -0
  73. package/lib/chain/blocks/utils/checkpoint.d.ts.map +1 -0
  74. package/lib/chain/blocks/utils/giraffeBanner.d.ts.map +1 -0
  75. package/lib/chain/blocks/utils/ownBanner.d.ts.map +1 -0
  76. package/lib/chain/blocks/utils/pandaMergeTransitionBanner.d.ts.map +1 -0
  77. package/lib/chain/blocks/utils/zebraBanner.d.ts.map +1 -0
  78. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -0
  79. package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts.map +1 -0
  80. package/lib/chain/blocks/verifyBlocksDataAvailability.js +8 -1
  81. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  82. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -0
  83. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -0
  84. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -0
  85. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +1 -0
  86. package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +1 -0
  87. package/lib/chain/blocks/writeBlockInputToDb.js +1 -7
  88. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  89. package/lib/chain/bls/index.d.ts.map +1 -0
  90. package/lib/chain/bls/interface.d.ts.map +1 -0
  91. package/lib/chain/bls/maybeBatch.d.ts.map +1 -0
  92. package/lib/chain/bls/multithread/index.d.ts.map +1 -0
  93. package/lib/chain/bls/multithread/jobItem.d.ts.map +1 -0
  94. package/lib/chain/bls/multithread/poolSize.d.ts.map +1 -0
  95. package/lib/chain/bls/multithread/types.d.ts.map +1 -0
  96. package/lib/chain/bls/multithread/utils.d.ts.map +1 -0
  97. package/lib/chain/bls/multithread/worker.d.ts.map +1 -0
  98. package/lib/chain/bls/singleThread.d.ts.map +1 -0
  99. package/lib/chain/bls/utils.d.ts.map +1 -0
  100. package/lib/chain/chain.d.ts +1 -1
  101. package/lib/chain/chain.d.ts.map +1 -0
  102. package/lib/chain/chain.js +4 -6
  103. package/lib/chain/chain.js.map +1 -1
  104. package/lib/chain/emitter.d.ts +2 -2
  105. package/lib/chain/emitter.d.ts.map +1 -0
  106. package/lib/chain/errors/attestationError.d.ts.map +1 -0
  107. package/lib/chain/errors/attesterSlashingError.d.ts.map +1 -0
  108. package/lib/chain/errors/blobSidecarError.d.ts.map +1 -0
  109. package/lib/chain/errors/blockError.d.ts.map +1 -0
  110. package/lib/chain/errors/blsToExecutionChangeError.d.ts.map +1 -0
  111. package/lib/chain/errors/dataColumnSidecarError.d.ts.map +1 -0
  112. package/lib/chain/errors/gossipValidation.d.ts.map +1 -0
  113. package/lib/chain/errors/index.d.ts.map +1 -0
  114. package/lib/chain/errors/lightClientError.d.ts.map +1 -0
  115. package/lib/chain/errors/proposerSlashingError.d.ts.map +1 -0
  116. package/lib/chain/errors/syncCommitteeError.d.ts.map +1 -0
  117. package/lib/chain/errors/voluntaryExitError.d.ts.map +1 -0
  118. package/lib/chain/forkChoice/index.d.ts.map +1 -0
  119. package/lib/chain/genesis/genesis.d.ts.map +1 -0
  120. package/lib/chain/genesis/interface.d.ts.map +1 -0
  121. package/lib/chain/index.d.ts.map +1 -0
  122. package/lib/chain/initState.d.ts.map +1 -0
  123. package/lib/chain/interface.d.ts.map +1 -0
  124. package/lib/chain/lightClient/index.d.ts +2 -2
  125. package/lib/chain/lightClient/index.d.ts.map +1 -0
  126. package/lib/chain/lightClient/index.js +2 -0
  127. package/lib/chain/lightClient/index.js.map +1 -1
  128. package/lib/chain/lightClient/proofs.d.ts.map +1 -0
  129. package/lib/chain/lightClient/types.d.ts.map +1 -0
  130. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -0
  131. package/lib/chain/opPools/attestationPool.d.ts +2 -3
  132. package/lib/chain/opPools/attestationPool.d.ts.map +1 -0
  133. package/lib/chain/opPools/attestationPool.js +3 -5
  134. package/lib/chain/opPools/attestationPool.js.map +1 -1
  135. package/lib/chain/opPools/index.d.ts.map +1 -0
  136. package/lib/chain/opPools/opPool.d.ts.map +1 -0
  137. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts +3 -2
  138. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts.map +1 -0
  139. package/lib/chain/opPools/syncCommitteeMessagePool.js +6 -5
  140. package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
  141. package/lib/chain/opPools/syncContributionAndProofPool.d.ts.map +1 -0
  142. package/lib/chain/opPools/types.d.ts +1 -1
  143. package/lib/chain/opPools/types.d.ts.map +1 -0
  144. package/lib/chain/opPools/types.js +1 -1
  145. package/lib/chain/opPools/types.js.map +1 -1
  146. package/lib/chain/opPools/utils.d.ts.map +1 -0
  147. package/lib/chain/options.d.ts.map +1 -0
  148. package/lib/chain/prepareNextSlot.d.ts +3 -3
  149. package/lib/chain/prepareNextSlot.d.ts.map +1 -0
  150. package/lib/chain/prepareNextSlot.js +8 -8
  151. package/lib/chain/prepareNextSlot.js.map +1 -1
  152. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -0
  153. package/lib/chain/produceBlock/index.d.ts.map +1 -0
  154. package/lib/chain/produceBlock/produceBlockBody.d.ts +1 -4
  155. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -0
  156. package/lib/chain/produceBlock/produceBlockBody.js +13 -4
  157. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  158. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.d.ts.map +1 -0
  159. package/lib/chain/regen/errors.d.ts.map +1 -0
  160. package/lib/chain/regen/index.d.ts.map +1 -0
  161. package/lib/chain/regen/interface.d.ts +1 -0
  162. package/lib/chain/regen/interface.d.ts.map +1 -0
  163. package/lib/chain/regen/interface.js +1 -0
  164. package/lib/chain/regen/interface.js.map +1 -1
  165. package/lib/chain/regen/queued.d.ts.map +1 -0
  166. package/lib/chain/regen/regen.d.ts.map +1 -0
  167. package/lib/chain/reprocess.d.ts.map +1 -0
  168. package/lib/chain/rewards/attestationsRewards.d.ts.map +1 -0
  169. package/lib/chain/rewards/blockRewards.d.ts.map +1 -0
  170. package/lib/chain/rewards/syncCommitteeRewards.d.ts.map +1 -0
  171. package/lib/chain/seenCache/index.d.ts.map +1 -0
  172. package/lib/chain/seenCache/seenAggregateAndProof.d.ts.map +1 -0
  173. package/lib/chain/seenCache/seenAttestationData.d.ts.map +1 -0
  174. package/lib/chain/seenCache/seenAttesters.d.ts.map +1 -0
  175. package/lib/chain/seenCache/seenBlockAttesters.d.ts.map +1 -0
  176. package/lib/chain/seenCache/seenBlockProposers.d.ts.map +1 -0
  177. package/lib/chain/seenCache/seenCommittee.d.ts.map +1 -0
  178. package/lib/chain/seenCache/seenCommitteeContribution.d.ts.map +1 -0
  179. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -0
  180. package/lib/chain/seenCache/seenGossipBlockInput.js +8 -1
  181. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  182. package/lib/chain/serializeState.d.ts.map +1 -0
  183. package/lib/chain/shufflingCache.d.ts.map +1 -0
  184. package/lib/chain/stateCache/blockStateCacheImpl.d.ts.map +1 -0
  185. package/lib/chain/stateCache/datastore/db.d.ts.map +1 -0
  186. package/lib/chain/stateCache/datastore/file.d.ts.map +1 -0
  187. package/lib/chain/stateCache/datastore/index.d.ts.map +1 -0
  188. package/lib/chain/stateCache/datastore/types.d.ts.map +1 -0
  189. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -0
  190. package/lib/chain/stateCache/inMemoryCheckpointsCache.d.ts.map +1 -0
  191. package/lib/chain/stateCache/index.d.ts.map +1 -0
  192. package/lib/chain/stateCache/mapMetrics.d.ts.map +1 -0
  193. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -0
  194. package/lib/chain/stateCache/persistentCheckpointsCache.js +9 -8
  195. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  196. package/lib/chain/stateCache/types.d.ts.map +1 -0
  197. package/lib/chain/validation/aggregateAndProof.d.ts.map +1 -0
  198. package/lib/chain/validation/attestation.d.ts.map +1 -0
  199. package/lib/chain/validation/attesterSlashing.d.ts.map +1 -0
  200. package/lib/chain/validation/blobSidecar.d.ts.map +1 -0
  201. package/lib/chain/validation/block.d.ts.map +1 -0
  202. package/lib/chain/validation/blsToExecutionChange.d.ts.map +1 -0
  203. package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -0
  204. package/lib/chain/validation/dataColumnSidecar.js +1 -1
  205. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  206. package/lib/chain/validation/index.d.ts.map +1 -0
  207. package/lib/chain/validation/lightClientFinalityUpdate.d.ts.map +1 -0
  208. package/lib/chain/validation/lightClientFinalityUpdate.js +4 -3
  209. package/lib/chain/validation/lightClientFinalityUpdate.js.map +1 -1
  210. package/lib/chain/validation/lightClientOptimisticUpdate.d.ts +6 -4
  211. package/lib/chain/validation/lightClientOptimisticUpdate.d.ts.map +1 -0
  212. package/lib/chain/validation/lightClientOptimisticUpdate.js +11 -11
  213. package/lib/chain/validation/lightClientOptimisticUpdate.js.map +1 -1
  214. package/lib/chain/validation/proposerSlashing.d.ts.map +1 -0
  215. package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts.map +1 -0
  216. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -0
  217. package/lib/chain/validation/signatureSets/index.d.ts.map +1 -0
  218. package/lib/chain/validation/signatureSets/selectionProof.d.ts.map +1 -0
  219. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -0
  220. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -0
  221. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -0
  222. package/lib/chain/validation/syncCommittee.d.ts.map +1 -0
  223. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -0
  224. package/lib/chain/validation/voluntaryExit.d.ts.map +1 -0
  225. package/lib/chain/validatorMonitor.d.ts.map +1 -0
  226. package/lib/chain/validatorMonitor.js +21 -15
  227. package/lib/chain/validatorMonitor.js.map +1 -1
  228. package/lib/constants/constants.d.ts.map +1 -0
  229. package/lib/constants/index.d.ts.map +1 -0
  230. package/lib/constants/network.d.ts.map +1 -0
  231. package/lib/db/beacon.d.ts.map +1 -0
  232. package/lib/db/buckets.d.ts +4 -4
  233. package/lib/db/buckets.d.ts.map +1 -0
  234. package/lib/db/buckets.js +4 -4
  235. package/lib/db/buckets.js.map +1 -1
  236. package/lib/db/index.d.ts.map +1 -0
  237. package/lib/db/interface.d.ts.map +1 -0
  238. package/lib/db/options.d.ts.map +1 -0
  239. package/lib/db/repositories/attesterSlashing.d.ts.map +1 -0
  240. package/lib/db/repositories/backfilledRanges.d.ts.map +1 -0
  241. package/lib/db/repositories/blobSidecars.d.ts.map +1 -0
  242. package/lib/db/repositories/blobSidecars.js +1 -1
  243. package/lib/db/repositories/blobSidecars.js.map +1 -1
  244. package/lib/db/repositories/blobSidecarsArchive.d.ts.map +1 -0
  245. package/lib/db/repositories/blobSidecarsArchive.js +1 -1
  246. package/lib/db/repositories/blobSidecarsArchive.js.map +1 -1
  247. package/lib/db/repositories/block.d.ts.map +1 -0
  248. package/lib/db/repositories/blockArchive.d.ts.map +1 -0
  249. package/lib/db/repositories/blockArchiveIndex.d.ts +2 -2
  250. package/lib/db/repositories/blockArchiveIndex.d.ts.map +1 -0
  251. package/lib/db/repositories/blsToExecutionChange.d.ts.map +1 -0
  252. package/lib/db/repositories/checkpointState.d.ts.map +1 -0
  253. package/lib/db/repositories/dataColumnSidecar.d.ts.map +1 -0
  254. package/lib/db/repositories/dataColumnSidecar.js +1 -1
  255. package/lib/db/repositories/dataColumnSidecar.js.map +1 -1
  256. package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +1 -0
  257. package/lib/db/repositories/dataColumnSidecarArchive.js +1 -1
  258. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
  259. package/lib/db/repositories/depositDataRoot.d.ts.map +1 -0
  260. package/lib/db/repositories/depositEvent.d.ts.map +1 -0
  261. package/lib/db/repositories/eth1Data.d.ts.map +1 -0
  262. package/lib/db/repositories/index.d.ts.map +1 -0
  263. package/lib/db/repositories/lightclientBestUpdate.d.ts.map +1 -0
  264. package/lib/db/repositories/lightclientCheckpointHeader.d.ts.map +1 -0
  265. package/lib/db/repositories/lightclientSyncCommittee.d.ts.map +1 -0
  266. package/lib/db/repositories/lightclientSyncCommitteeWitness.d.ts.map +1 -0
  267. package/lib/db/repositories/proposerSlashing.d.ts.map +1 -0
  268. package/lib/db/repositories/stateArchive.d.ts.map +1 -0
  269. package/lib/db/repositories/stateArchiveIndex.d.ts.map +1 -0
  270. package/lib/db/repositories/voluntaryExit.d.ts.map +1 -0
  271. package/lib/db/single/index.d.ts.map +1 -0
  272. package/lib/db/single/preGenesisState.d.ts.map +1 -0
  273. package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts.map +1 -0
  274. package/lib/eth1/errors.d.ts.map +1 -0
  275. package/lib/eth1/eth1DataCache.d.ts.map +1 -0
  276. package/lib/eth1/eth1DepositDataTracker.d.ts.map +1 -0
  277. package/lib/eth1/eth1DepositsCache.d.ts.map +1 -0
  278. package/lib/eth1/eth1MergeBlockTracker.d.ts.map +1 -0
  279. package/lib/eth1/index.d.ts.map +1 -0
  280. package/lib/eth1/interface.d.ts.map +1 -0
  281. package/lib/eth1/options.d.ts.map +1 -0
  282. package/lib/eth1/provider/eth1Provider.d.ts.map +1 -0
  283. package/lib/eth1/provider/jsonRpcHttpClient.d.ts.map +1 -0
  284. package/lib/eth1/provider/jwt.d.ts.map +1 -0
  285. package/lib/eth1/provider/utils.d.ts.map +1 -0
  286. package/lib/eth1/stream.d.ts.map +1 -0
  287. package/lib/eth1/utils/depositContract.d.ts.map +1 -0
  288. package/lib/eth1/utils/deposits.d.ts.map +1 -0
  289. package/lib/eth1/utils/eth1Data.d.ts.map +1 -0
  290. package/lib/eth1/utils/eth1DepositEvent.d.ts.map +1 -0
  291. package/lib/eth1/utils/eth1Vote.d.ts.map +1 -0
  292. package/lib/eth1/utils/groupDepositEventsByBlock.d.ts.map +1 -0
  293. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts.map +1 -0
  294. package/lib/execution/builder/cache.d.ts.map +1 -0
  295. package/lib/execution/builder/http.d.ts.map +1 -0
  296. package/lib/execution/builder/index.d.ts.map +1 -0
  297. package/lib/execution/builder/interface.d.ts.map +1 -0
  298. package/lib/execution/builder/utils.d.ts.map +1 -0
  299. package/lib/execution/engine/disabled.d.ts.map +1 -0
  300. package/lib/execution/engine/http.d.ts.map +1 -0
  301. package/lib/execution/engine/index.d.ts.map +1 -0
  302. package/lib/execution/engine/interface.d.ts.map +1 -0
  303. package/lib/execution/engine/mock.d.ts.map +1 -0
  304. package/lib/execution/engine/payloadIdCache.d.ts.map +1 -0
  305. package/lib/execution/engine/types.d.ts.map +1 -0
  306. package/lib/execution/engine/utils.d.ts.map +1 -0
  307. package/lib/execution/index.d.ts.map +1 -0
  308. package/lib/index.d.ts.map +1 -0
  309. package/lib/metrics/index.d.ts.map +1 -0
  310. package/lib/metrics/metrics/beacon.d.ts.map +1 -0
  311. package/lib/metrics/metrics/lodestar.d.ts +1 -1
  312. package/lib/metrics/metrics/lodestar.d.ts.map +1 -0
  313. package/lib/metrics/metrics/lodestar.js +3 -3
  314. package/lib/metrics/metrics/lodestar.js.map +1 -1
  315. package/lib/metrics/metrics.d.ts.map +1 -0
  316. package/lib/metrics/nodeJsMetrics.d.ts.map +1 -0
  317. package/lib/metrics/options.d.ts.map +1 -0
  318. package/lib/metrics/server/http.d.ts.map +1 -0
  319. package/lib/metrics/server/index.d.ts.map +1 -0
  320. package/lib/metrics/utils/avgMinMax.d.ts.map +1 -0
  321. package/lib/metrics/utils/gauge.d.ts.map +1 -0
  322. package/lib/metrics/utils/registryMetricCreator.d.ts.map +1 -0
  323. package/lib/monitoring/clientStats.d.ts.map +1 -0
  324. package/lib/monitoring/index.d.ts.map +1 -0
  325. package/lib/monitoring/options.d.ts.map +1 -0
  326. package/lib/monitoring/properties.d.ts.map +1 -0
  327. package/lib/monitoring/service.d.ts.map +1 -0
  328. package/lib/monitoring/system.d.ts.map +1 -0
  329. package/lib/monitoring/types.d.ts.map +1 -0
  330. package/lib/network/core/events.d.ts.map +1 -0
  331. package/lib/network/core/index.d.ts.map +1 -0
  332. package/lib/network/core/metrics.d.ts.map +1 -0
  333. package/lib/network/core/networkCore.d.ts.map +1 -0
  334. package/lib/network/core/networkCoreWorker.d.ts.map +1 -0
  335. package/lib/network/core/networkCoreWorkerHandler.d.ts.map +1 -0
  336. package/lib/network/core/types.d.ts.map +1 -0
  337. package/lib/network/discv5/index.d.ts.map +1 -0
  338. package/lib/network/discv5/types.d.ts.map +1 -0
  339. package/lib/network/discv5/utils.d.ts.map +1 -0
  340. package/lib/network/discv5/worker.d.ts.map +1 -0
  341. package/lib/network/events.d.ts.map +1 -0
  342. package/lib/network/forks.d.ts.map +1 -0
  343. package/lib/network/gossip/constants.d.ts.map +1 -0
  344. package/lib/network/gossip/encoding.d.ts.map +1 -0
  345. package/lib/network/gossip/errors.d.ts.map +1 -0
  346. package/lib/network/gossip/gossipsub.d.ts.map +1 -0
  347. package/lib/network/gossip/gossipsub.js +1 -1
  348. package/lib/network/gossip/gossipsub.js.map +1 -1
  349. package/lib/network/gossip/index.d.ts.map +1 -0
  350. package/lib/network/gossip/interface.d.ts.map +1 -0
  351. package/lib/network/gossip/metrics.d.ts.map +1 -0
  352. package/lib/network/gossip/scoringParameters.d.ts.map +1 -0
  353. package/lib/network/gossip/scoringParameters.js +4 -4
  354. package/lib/network/gossip/scoringParameters.js.map +1 -1
  355. package/lib/network/gossip/topic.d.ts.map +1 -0
  356. package/lib/network/gossip/topic.js +2 -2
  357. package/lib/network/gossip/topic.js.map +1 -1
  358. package/lib/network/index.d.ts.map +1 -0
  359. package/lib/network/interface.d.ts.map +1 -0
  360. package/lib/network/libp2p/error.d.ts.map +1 -0
  361. package/lib/network/libp2p/index.d.ts.map +1 -0
  362. package/lib/network/metadata.d.ts.map +1 -0
  363. package/lib/network/network.d.ts +1 -1
  364. package/lib/network/network.d.ts.map +1 -0
  365. package/lib/network/network.js +11 -13
  366. package/lib/network/network.js.map +1 -1
  367. package/lib/network/networkConfig.d.ts.map +1 -0
  368. package/lib/network/options.d.ts.map +1 -0
  369. package/lib/network/peers/client.d.ts.map +1 -0
  370. package/lib/network/peers/datastore.d.ts +2 -2
  371. package/lib/network/peers/datastore.d.ts.map +1 -0
  372. package/lib/network/peers/datastore.js +2 -2
  373. package/lib/network/peers/datastore.js.map +1 -1
  374. package/lib/network/peers/datastore_bun.d.ts +3 -0
  375. package/lib/network/peers/datastore_bun.d.ts.map +1 -0
  376. package/lib/network/peers/datastore_bun.js +3 -0
  377. package/lib/network/peers/datastore_bun.js.map +1 -0
  378. package/lib/network/peers/discover.d.ts.map +1 -0
  379. package/lib/network/peers/index.d.ts.map +1 -0
  380. package/lib/network/peers/peerManager.d.ts.map +1 -0
  381. package/lib/network/peers/peerManager.js +2 -1
  382. package/lib/network/peers/peerManager.js.map +1 -1
  383. package/lib/network/peers/peersData.d.ts.map +1 -0
  384. package/lib/network/peers/score/constants.d.ts.map +1 -0
  385. package/lib/network/peers/score/index.d.ts.map +1 -0
  386. package/lib/network/peers/score/interface.d.ts.map +1 -0
  387. package/lib/network/peers/score/score.d.ts.map +1 -0
  388. package/lib/network/peers/score/store.d.ts.map +1 -0
  389. package/lib/network/peers/score/utils.d.ts.map +1 -0
  390. package/lib/network/peers/utils/assertPeerRelevance.d.ts.map +1 -0
  391. package/lib/network/peers/utils/enrSubnetsDeserialize.d.ts.map +1 -0
  392. package/lib/network/peers/utils/getConnectedPeerIds.d.ts.map +1 -0
  393. package/lib/network/peers/utils/index.d.ts.map +1 -0
  394. package/lib/network/peers/utils/prioritizePeers.d.ts.map +1 -0
  395. package/lib/network/peers/utils/subnetMap.d.ts.map +1 -0
  396. package/lib/network/processor/aggregatorTracker.d.ts.map +1 -0
  397. package/lib/network/processor/extractSlotRootFns.d.ts.map +1 -0
  398. package/lib/network/processor/gossipHandlers.d.ts.map +1 -0
  399. package/lib/network/processor/gossipHandlers.js +1 -1
  400. package/lib/network/processor/gossipHandlers.js.map +1 -1
  401. package/lib/network/processor/gossipQueues/index.d.ts.map +1 -0
  402. package/lib/network/processor/gossipQueues/indexed.d.ts.map +1 -0
  403. package/lib/network/processor/gossipQueues/linear.d.ts.map +1 -0
  404. package/lib/network/processor/gossipQueues/types.d.ts.map +1 -0
  405. package/lib/network/processor/gossipValidatorFn.d.ts.map +1 -0
  406. package/lib/network/processor/index.d.ts +1 -1
  407. package/lib/network/processor/index.d.ts.map +1 -0
  408. package/lib/network/processor/index.js +2 -3
  409. package/lib/network/processor/index.js.map +1 -1
  410. package/lib/network/processor/types.d.ts.map +1 -0
  411. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -0
  412. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -0
  413. package/lib/network/reqresp/handlers/beaconBlocksByRoot.d.ts.map +1 -0
  414. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +1 -0
  415. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts.map +1 -0
  416. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -0
  417. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.d.ts.map +1 -0
  418. package/lib/network/reqresp/handlers/index.d.ts.map +1 -0
  419. package/lib/network/reqresp/handlers/lightClientBootstrap.d.ts.map +1 -0
  420. package/lib/network/reqresp/handlers/lightClientFinalityUpdate.d.ts.map +1 -0
  421. package/lib/network/reqresp/handlers/lightClientOptimisticUpdate.d.ts.map +1 -0
  422. package/lib/network/reqresp/handlers/lightClientUpdatesByRange.d.ts.map +1 -0
  423. package/lib/network/reqresp/index.d.ts.map +1 -0
  424. package/lib/network/reqresp/interface.d.ts.map +1 -0
  425. package/lib/network/reqresp/protocols.d.ts.map +1 -0
  426. package/lib/network/reqresp/rateLimit.d.ts.map +1 -0
  427. package/lib/network/reqresp/score.d.ts.map +1 -0
  428. package/lib/network/reqresp/types.d.ts.map +1 -0
  429. package/lib/network/reqresp/utils/collect.d.ts.map +1 -0
  430. package/lib/network/reqresp/utils/collectSequentialBlocksInRange.d.ts.map +1 -0
  431. package/lib/network/reqresp/utils/dataColumnResponseValidation.d.ts.map +1 -0
  432. package/lib/network/statusCache.d.ts.map +1 -0
  433. package/lib/network/subnets/attnetsService.d.ts.map +1 -0
  434. package/lib/network/subnets/attnetsService.js +1 -1
  435. package/lib/network/subnets/attnetsService.js.map +1 -1
  436. package/lib/network/subnets/index.d.ts.map +1 -0
  437. package/lib/network/subnets/interface.d.ts.map +1 -0
  438. package/lib/network/subnets/syncnetsService.d.ts.map +1 -0
  439. package/lib/network/subnets/util.d.ts.map +1 -0
  440. package/lib/network/util.d.ts.map +1 -0
  441. package/lib/node/index.d.ts.map +1 -0
  442. package/lib/node/nodejs.d.ts.map +1 -0
  443. package/lib/node/notifier.d.ts.map +1 -0
  444. package/lib/node/notifier.js +1 -1
  445. package/lib/node/notifier.js.map +1 -1
  446. package/lib/node/options.d.ts.map +1 -0
  447. package/lib/node/utils/interop/deposits.d.ts.map +1 -0
  448. package/lib/node/utils/interop/state.d.ts.map +1 -0
  449. package/lib/node/utils/lightclient.d.ts.map +1 -0
  450. package/lib/node/utils/state.d.ts.map +1 -0
  451. package/lib/sync/backfill/backfill.d.ts.map +1 -0
  452. package/lib/sync/backfill/errors.d.ts.map +1 -0
  453. package/lib/sync/backfill/index.d.ts.map +1 -0
  454. package/lib/sync/backfill/verify.d.ts.map +1 -0
  455. package/lib/sync/constants.d.ts.map +1 -0
  456. package/lib/sync/index.d.ts.map +1 -0
  457. package/lib/sync/interface.d.ts.map +1 -0
  458. package/lib/sync/options.d.ts.map +1 -0
  459. package/lib/sync/range/batch.d.ts.map +1 -0
  460. package/lib/sync/range/chain.d.ts.map +1 -0
  461. package/lib/sync/range/range.d.ts.map +1 -0
  462. package/lib/sync/range/utils/batches.d.ts.map +1 -0
  463. package/lib/sync/range/utils/chainTarget.d.ts.map +1 -0
  464. package/lib/sync/range/utils/hashBlocks.d.ts.map +1 -0
  465. package/lib/sync/range/utils/index.d.ts.map +1 -0
  466. package/lib/sync/range/utils/peerBalancer.d.ts.map +1 -0
  467. package/lib/sync/range/utils/updateChains.d.ts.map +1 -0
  468. package/lib/sync/sync.d.ts.map +1 -0
  469. package/lib/sync/types.d.ts +0 -1
  470. package/lib/sync/types.d.ts.map +1 -0
  471. package/lib/sync/types.js.map +1 -1
  472. package/lib/sync/unknownBlock.d.ts +0 -1
  473. package/lib/sync/unknownBlock.d.ts.map +1 -0
  474. package/lib/sync/unknownBlock.js +18 -20
  475. package/lib/sync/unknownBlock.js.map +1 -1
  476. package/lib/sync/utils/downloadByRange.d.ts +2 -1
  477. package/lib/sync/utils/downloadByRange.d.ts.map +1 -0
  478. package/lib/sync/utils/downloadByRange.js +8 -3
  479. package/lib/sync/utils/downloadByRange.js.map +1 -1
  480. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -0
  481. package/lib/sync/utils/downloadByRoot.js +2 -1
  482. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  483. package/lib/sync/utils/pendingBlocksTree.d.ts.map +1 -0
  484. package/lib/sync/utils/remoteSyncType.d.ts.map +1 -0
  485. package/lib/util/address.d.ts.map +1 -0
  486. package/lib/util/array.d.ts.map +1 -0
  487. package/lib/util/asyncIterableToEvents.d.ts.map +1 -0
  488. package/lib/util/binarySearch.d.ts.map +1 -0
  489. package/lib/util/bitArray.d.ts.map +1 -0
  490. package/lib/util/blobs.d.ts.map +1 -0
  491. package/lib/util/blobs.js +5 -3
  492. package/lib/util/blobs.js.map +1 -1
  493. package/lib/util/bufferPool.d.ts.map +1 -0
  494. package/lib/util/bytes.d.ts.map +1 -0
  495. package/lib/util/chunkify.d.ts.map +1 -0
  496. package/lib/util/clock.d.ts +8 -3
  497. package/lib/util/clock.d.ts.map +1 -0
  498. package/lib/util/clock.js +8 -5
  499. package/lib/util/clock.js.map +1 -1
  500. package/lib/util/dataColumns.d.ts.map +1 -0
  501. package/lib/util/dataColumns.js +4 -2
  502. package/lib/util/dataColumns.js.map +1 -1
  503. package/lib/util/dependentRoot.d.ts.map +1 -0
  504. package/lib/util/enum.d.ts.map +1 -0
  505. package/lib/util/error.d.ts.map +1 -0
  506. package/lib/util/eventLoop.d.ts.map +1 -0
  507. package/lib/util/execution.d.ts.map +1 -0
  508. package/lib/util/file.d.ts.map +1 -0
  509. package/lib/util/forkChoice.d.ts.map +1 -0
  510. package/lib/util/forkName.d.ts.map +1 -0
  511. package/lib/util/graffiti.d.ts.map +1 -0
  512. package/lib/util/hex.d.ts.map +1 -0
  513. package/lib/util/index.d.ts.map +1 -0
  514. package/lib/util/ip.d.ts.map +1 -0
  515. package/lib/util/itTrigger.d.ts.map +1 -0
  516. package/lib/util/kzg.d.ts.map +1 -0
  517. package/lib/util/map.d.ts.map +1 -0
  518. package/lib/util/metadata.d.ts.map +1 -0
  519. package/lib/util/multifork.d.ts.map +1 -0
  520. package/lib/util/numpy.d.ts.map +1 -0
  521. package/lib/util/peerId.d.ts.map +1 -0
  522. package/lib/util/profile.d.ts.map +1 -0
  523. package/lib/util/promises.d.ts.map +1 -0
  524. package/lib/util/queue/errors.d.ts.map +1 -0
  525. package/lib/util/queue/fnQueue.d.ts.map +1 -0
  526. package/lib/util/queue/index.d.ts.map +1 -0
  527. package/lib/util/queue/itemQueue.d.ts.map +1 -0
  528. package/lib/util/queue/options.d.ts.map +1 -0
  529. package/lib/util/serializedCache.d.ts.map +1 -0
  530. package/lib/util/set.d.ts.map +1 -0
  531. package/lib/util/shuffle.d.ts.map +1 -0
  532. package/lib/util/sortBy.d.ts.map +1 -0
  533. package/lib/util/sszBytes.d.ts.map +1 -0
  534. package/lib/util/strictEvents.d.ts.map +1 -0
  535. package/lib/util/time.d.ts.map +1 -0
  536. package/lib/util/timeSeries.d.ts.map +1 -0
  537. package/lib/util/types.d.ts.map +1 -0
  538. package/lib/util/workerEvents.d.ts.map +1 -0
  539. package/lib/util/wrapError.d.ts.map +1 -0
  540. package/package.json +23 -20
  541. package/src/api/impl/api.ts +26 -0
  542. package/src/api/impl/beacon/blocks/index.ts +753 -0
  543. package/src/api/impl/beacon/blocks/utils.ts +75 -0
  544. package/src/api/impl/beacon/index.ts +35 -0
  545. package/src/api/impl/beacon/pool/index.ts +314 -0
  546. package/src/api/impl/beacon/rewards/index.ts +30 -0
  547. package/src/api/impl/beacon/state/index.ts +406 -0
  548. package/src/api/impl/beacon/state/utils.ts +189 -0
  549. package/src/api/impl/config/constants.ts +135 -0
  550. package/src/api/impl/config/index.ts +59 -0
  551. package/src/api/impl/debug/index.ts +131 -0
  552. package/src/api/impl/errors.ts +50 -0
  553. package/src/api/impl/events/index.ts +33 -0
  554. package/src/api/impl/index.ts +6 -0
  555. package/src/api/impl/lightclient/index.ts +64 -0
  556. package/src/api/impl/lodestar/index.ts +257 -0
  557. package/src/api/impl/node/index.ts +88 -0
  558. package/src/api/impl/node/utils.ts +51 -0
  559. package/src/api/impl/proof/index.ts +60 -0
  560. package/src/api/impl/types.ts +17 -0
  561. package/src/api/impl/utils.ts +25 -0
  562. package/src/api/impl/validator/index.ts +1526 -0
  563. package/src/api/impl/validator/utils.ts +85 -0
  564. package/src/api/index.ts +2 -0
  565. package/src/api/options.ts +16 -0
  566. package/src/api/rest/activeSockets.ts +109 -0
  567. package/src/api/rest/base.ts +216 -0
  568. package/src/api/rest/index.ts +63 -0
  569. package/src/api/rest/swaggerUI.ts +80 -0
  570. package/src/bun-wrappers/prometheus-gc-stats.ts +7 -0
  571. package/src/chain/ColumnReconstructionTracker.ts +90 -0
  572. package/src/chain/GetBlobsTracker.ts +115 -0
  573. package/src/chain/archiveStore/archiveStore.ts +222 -0
  574. package/src/chain/archiveStore/constants.ts +5 -0
  575. package/src/chain/archiveStore/historicalState/getHistoricalState.ts +116 -0
  576. package/src/chain/archiveStore/historicalState/historicalStateRegen.ts +68 -0
  577. package/src/chain/archiveStore/historicalState/metrics.ts +214 -0
  578. package/src/chain/archiveStore/historicalState/types.ts +41 -0
  579. package/src/chain/archiveStore/historicalState/worker.ts +77 -0
  580. package/src/chain/archiveStore/index.ts +3 -0
  581. package/src/chain/archiveStore/interface.ts +75 -0
  582. package/src/chain/archiveStore/strategies/frequencyStateArchiveStrategy.ts +138 -0
  583. package/src/chain/archiveStore/utils/archiveBlocks.ts +437 -0
  584. package/src/chain/archiveStore/utils/pruneHistory.ts +56 -0
  585. package/src/chain/archiveStore/utils/updateBackfillRange.ts +50 -0
  586. package/src/chain/balancesCache.ts +52 -0
  587. package/src/chain/beaconProposerCache.ts +43 -0
  588. package/src/chain/blocks/blockInput/blockInput.ts +854 -0
  589. package/src/chain/blocks/blockInput/errors.ts +48 -0
  590. package/src/chain/blocks/blockInput/index.ts +4 -0
  591. package/src/chain/blocks/blockInput/types.ts +145 -0
  592. package/src/chain/blocks/blockInput/utils.ts +21 -0
  593. package/src/chain/blocks/importBlock.ts +599 -0
  594. package/src/chain/blocks/index.ts +179 -0
  595. package/src/chain/blocks/types.ts +101 -0
  596. package/src/chain/blocks/utils/blowfishBanner.ts +28 -0
  597. package/src/chain/blocks/utils/chainSegment.ts +29 -0
  598. package/src/chain/blocks/utils/checkpoint.ts +25 -0
  599. package/src/chain/blocks/utils/giraffeBanner.ts +30 -0
  600. package/src/chain/blocks/utils/ownBanner.ts +20 -0
  601. package/src/chain/blocks/utils/pandaMergeTransitionBanner.ts +43 -0
  602. package/src/chain/blocks/utils/zebraBanner.ts +45 -0
  603. package/src/chain/blocks/verifyBlock.ts +242 -0
  604. package/src/chain/blocks/verifyBlocksDataAvailability.ts +42 -0
  605. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +438 -0
  606. package/src/chain/blocks/verifyBlocksSanityChecks.ts +129 -0
  607. package/src/chain/blocks/verifyBlocksSignatures.ts +105 -0
  608. package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +114 -0
  609. package/src/chain/blocks/writeBlockInputToDb.ts +120 -0
  610. package/src/chain/bls/index.ts +4 -0
  611. package/src/chain/bls/interface.ts +68 -0
  612. package/src/chain/bls/maybeBatch.ts +45 -0
  613. package/src/chain/bls/multithread/index.ts +582 -0
  614. package/src/chain/bls/multithread/jobItem.ts +119 -0
  615. package/src/chain/bls/multithread/poolSize.ts +16 -0
  616. package/src/chain/bls/multithread/types.ts +38 -0
  617. package/src/chain/bls/multithread/utils.ts +19 -0
  618. package/src/chain/bls/multithread/worker.ts +114 -0
  619. package/src/chain/bls/singleThread.ts +87 -0
  620. package/src/chain/bls/utils.ts +30 -0
  621. package/src/chain/chain.ts +1352 -0
  622. package/src/chain/emitter.ts +113 -0
  623. package/src/chain/errors/attestationError.ts +194 -0
  624. package/src/chain/errors/attesterSlashingError.ts +11 -0
  625. package/src/chain/errors/blobSidecarError.ts +60 -0
  626. package/src/chain/errors/blockError.ts +166 -0
  627. package/src/chain/errors/blsToExecutionChangeError.ts +13 -0
  628. package/src/chain/errors/dataColumnSidecarError.ts +80 -0
  629. package/src/chain/errors/gossipValidation.ts +20 -0
  630. package/src/chain/errors/index.ts +10 -0
  631. package/src/chain/errors/lightClientError.ts +30 -0
  632. package/src/chain/errors/proposerSlashingError.ts +11 -0
  633. package/src/chain/errors/syncCommitteeError.ts +36 -0
  634. package/src/chain/errors/voluntaryExitError.ts +13 -0
  635. package/src/chain/forkChoice/index.ts +112 -0
  636. package/src/chain/genesis/genesis.ts +190 -0
  637. package/src/chain/genesis/interface.ts +14 -0
  638. package/src/chain/index.ts +6 -0
  639. package/src/chain/initState.ts +221 -0
  640. package/src/chain/interface.ts +280 -0
  641. package/src/chain/lightClient/index.ts +772 -0
  642. package/src/chain/lightClient/proofs.ts +85 -0
  643. package/src/chain/lightClient/types.ts +33 -0
  644. package/src/chain/opPools/aggregatedAttestationPool.ts +1063 -0
  645. package/src/chain/opPools/attestationPool.ts +282 -0
  646. package/src/chain/opPools/index.ts +5 -0
  647. package/src/chain/opPools/opPool.ts +462 -0
  648. package/src/chain/opPools/syncCommitteeMessagePool.ts +169 -0
  649. package/src/chain/opPools/syncContributionAndProofPool.ts +240 -0
  650. package/src/chain/opPools/types.ts +35 -0
  651. package/src/chain/opPools/utils.ts +65 -0
  652. package/src/chain/options.ts +138 -0
  653. package/src/chain/prepareNextSlot.ts +277 -0
  654. package/src/chain/produceBlock/computeNewStateRoot.ts +55 -0
  655. package/src/chain/produceBlock/index.ts +2 -0
  656. package/src/chain/produceBlock/produceBlockBody.ts +799 -0
  657. package/src/chain/produceBlock/validateBlobsAndKzgCommitments.ts +54 -0
  658. package/src/chain/regen/errors.ts +30 -0
  659. package/src/chain/regen/index.ts +4 -0
  660. package/src/chain/regen/interface.ts +94 -0
  661. package/src/chain/regen/queued.ts +317 -0
  662. package/src/chain/regen/regen.ts +424 -0
  663. package/src/chain/reprocess.ts +161 -0
  664. package/src/chain/rewards/attestationsRewards.ts +196 -0
  665. package/src/chain/rewards/blockRewards.ts +150 -0
  666. package/src/chain/rewards/syncCommitteeRewards.ts +58 -0
  667. package/src/chain/seenCache/index.ts +5 -0
  668. package/src/chain/seenCache/seenAggregateAndProof.ts +120 -0
  669. package/src/chain/seenCache/seenAttestationData.ts +145 -0
  670. package/src/chain/seenCache/seenAttesters.ts +58 -0
  671. package/src/chain/seenCache/seenBlockAttesters.ts +18 -0
  672. package/src/chain/seenCache/seenBlockProposers.ts +48 -0
  673. package/src/chain/seenCache/seenCommittee.ts +43 -0
  674. package/src/chain/seenCache/seenCommitteeContribution.ts +104 -0
  675. package/src/chain/seenCache/seenGossipBlockInput.ts +381 -0
  676. package/src/chain/serializeState.ts +32 -0
  677. package/src/chain/shufflingCache.ts +238 -0
  678. package/src/chain/stateCache/blockStateCacheImpl.ts +150 -0
  679. package/src/chain/stateCache/datastore/db.ts +36 -0
  680. package/src/chain/stateCache/datastore/file.ts +53 -0
  681. package/src/chain/stateCache/datastore/index.ts +2 -0
  682. package/src/chain/stateCache/datastore/types.ts +13 -0
  683. package/src/chain/stateCache/fifoBlockStateCache.ts +208 -0
  684. package/src/chain/stateCache/inMemoryCheckpointsCache.ts +198 -0
  685. package/src/chain/stateCache/index.ts +3 -0
  686. package/src/chain/stateCache/mapMetrics.ts +52 -0
  687. package/src/chain/stateCache/persistentCheckpointsCache.ts +837 -0
  688. package/src/chain/stateCache/types.ts +86 -0
  689. package/src/chain/validation/aggregateAndProof.ts +258 -0
  690. package/src/chain/validation/attestation.ts +885 -0
  691. package/src/chain/validation/attesterSlashing.ts +61 -0
  692. package/src/chain/validation/blobSidecar.ts +301 -0
  693. package/src/chain/validation/block.ts +188 -0
  694. package/src/chain/validation/blsToExecutionChange.ts +61 -0
  695. package/src/chain/validation/dataColumnSidecar.ts +381 -0
  696. package/src/chain/validation/index.ts +9 -0
  697. package/src/chain/validation/lightClientFinalityUpdate.ts +46 -0
  698. package/src/chain/validation/lightClientOptimisticUpdate.ts +68 -0
  699. package/src/chain/validation/proposerSlashing.ts +54 -0
  700. package/src/chain/validation/signatureSets/aggregateAndProof.ts +38 -0
  701. package/src/chain/validation/signatureSets/contributionAndProof.ts +27 -0
  702. package/src/chain/validation/signatureSets/index.ts +6 -0
  703. package/src/chain/validation/signatureSets/selectionProof.ts +27 -0
  704. package/src/chain/validation/signatureSets/syncCommittee.ts +22 -0
  705. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +18 -0
  706. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +27 -0
  707. package/src/chain/validation/syncCommittee.ts +165 -0
  708. package/src/chain/validation/syncCommitteeContributionAndProof.ts +122 -0
  709. package/src/chain/validation/voluntaryExit.ts +58 -0
  710. package/src/chain/validatorMonitor.ts +1310 -0
  711. package/src/constants/constants.ts +15 -0
  712. package/src/constants/index.ts +2 -0
  713. package/src/constants/network.ts +52 -0
  714. package/src/db/beacon.ts +113 -0
  715. package/src/db/buckets.ts +80 -0
  716. package/src/db/index.ts +2 -0
  717. package/src/db/interface.ts +76 -0
  718. package/src/db/options.ts +7 -0
  719. package/src/db/repositories/attesterSlashing.ts +38 -0
  720. package/src/db/repositories/backfilledRanges.ts +29 -0
  721. package/src/db/repositories/blobSidecars.ts +37 -0
  722. package/src/db/repositories/blobSidecarsArchive.ts +28 -0
  723. package/src/db/repositories/block.ts +33 -0
  724. package/src/db/repositories/blockArchive.ts +170 -0
  725. package/src/db/repositories/blockArchiveIndex.ts +45 -0
  726. package/src/db/repositories/blsToExecutionChange.ts +16 -0
  727. package/src/db/repositories/checkpointState.ts +31 -0
  728. package/src/db/repositories/dataColumnSidecar.ts +49 -0
  729. package/src/db/repositories/dataColumnSidecarArchive.ts +56 -0
  730. package/src/db/repositories/depositDataRoot.ts +80 -0
  731. package/src/db/repositories/depositEvent.ts +32 -0
  732. package/src/db/repositories/eth1Data.ts +33 -0
  733. package/src/db/repositories/index.ts +20 -0
  734. package/src/db/repositories/lightclientBestUpdate.ts +41 -0
  735. package/src/db/repositories/lightclientCheckpointHeader.ts +32 -0
  736. package/src/db/repositories/lightclientSyncCommittee.ts +16 -0
  737. package/src/db/repositories/lightclientSyncCommitteeWitness.ts +77 -0
  738. package/src/db/repositories/proposerSlashing.ts +15 -0
  739. package/src/db/repositories/stateArchive.ts +69 -0
  740. package/src/db/repositories/stateArchiveIndex.ts +18 -0
  741. package/src/db/repositories/voluntaryExit.ts +15 -0
  742. package/src/db/single/index.ts +2 -0
  743. package/src/db/single/preGenesisState.ts +37 -0
  744. package/src/db/single/preGenesisStateLastProcessedBlock.ts +34 -0
  745. package/src/eth1/errors.ts +40 -0
  746. package/src/eth1/eth1DataCache.ts +26 -0
  747. package/src/eth1/eth1DepositDataTracker.ts +410 -0
  748. package/src/eth1/eth1DepositsCache.ts +141 -0
  749. package/src/eth1/eth1MergeBlockTracker.ts +328 -0
  750. package/src/eth1/index.ts +157 -0
  751. package/src/eth1/interface.ts +131 -0
  752. package/src/eth1/options.ts +28 -0
  753. package/src/eth1/provider/eth1Provider.ts +229 -0
  754. package/src/eth1/provider/jsonRpcHttpClient.ts +390 -0
  755. package/src/eth1/provider/jwt.ts +36 -0
  756. package/src/eth1/provider/utils.ts +136 -0
  757. package/src/eth1/stream.ts +75 -0
  758. package/src/eth1/utils/depositContract.ts +37 -0
  759. package/src/eth1/utils/deposits.ts +70 -0
  760. package/src/eth1/utils/eth1Data.ts +100 -0
  761. package/src/eth1/utils/eth1DepositEvent.ts +12 -0
  762. package/src/eth1/utils/eth1Vote.ts +142 -0
  763. package/src/eth1/utils/groupDepositEventsByBlock.ts +19 -0
  764. package/src/eth1/utils/optimizeNextBlockDiffForGenesis.ts +18 -0
  765. package/src/execution/builder/cache.ts +39 -0
  766. package/src/execution/builder/http.ts +229 -0
  767. package/src/execution/builder/index.ts +27 -0
  768. package/src/execution/builder/interface.ts +49 -0
  769. package/src/execution/builder/utils.ts +19 -0
  770. package/src/execution/engine/disabled.ts +35 -0
  771. package/src/execution/engine/http.ts +644 -0
  772. package/src/execution/engine/index.ts +63 -0
  773. package/src/execution/engine/interface.ts +199 -0
  774. package/src/execution/engine/mock.ts +493 -0
  775. package/src/execution/engine/payloadIdCache.ts +54 -0
  776. package/src/execution/engine/types.ts +640 -0
  777. package/src/execution/engine/utils.ts +136 -0
  778. package/src/execution/index.ts +4 -0
  779. package/src/index.ts +20 -0
  780. package/src/metrics/index.ts +4 -0
  781. package/src/metrics/metrics/beacon.ts +390 -0
  782. package/src/metrics/metrics/lodestar.ts +1870 -0
  783. package/src/metrics/metrics.ts +43 -0
  784. package/src/metrics/nodeJsMetrics.ts +19 -0
  785. package/src/metrics/options.ts +22 -0
  786. package/src/metrics/server/http.ts +114 -0
  787. package/src/metrics/server/index.ts +1 -0
  788. package/src/metrics/utils/avgMinMax.ts +87 -0
  789. package/src/metrics/utils/gauge.ts +22 -0
  790. package/src/metrics/utils/registryMetricCreator.ts +41 -0
  791. package/src/monitoring/clientStats.ts +297 -0
  792. package/src/monitoring/index.ts +2 -0
  793. package/src/monitoring/options.ts +19 -0
  794. package/src/monitoring/properties.ts +152 -0
  795. package/src/monitoring/service.ts +235 -0
  796. package/src/monitoring/system.ts +146 -0
  797. package/src/monitoring/types.ts +21 -0
  798. package/src/network/core/events.ts +59 -0
  799. package/src/network/core/index.ts +3 -0
  800. package/src/network/core/metrics.ts +304 -0
  801. package/src/network/core/networkCore.ts +599 -0
  802. package/src/network/core/networkCoreWorker.ts +176 -0
  803. package/src/network/core/networkCoreWorkerHandler.ts +284 -0
  804. package/src/network/core/types.ts +119 -0
  805. package/src/network/discv5/index.ts +132 -0
  806. package/src/network/discv5/types.ts +74 -0
  807. package/src/network/discv5/utils.ts +50 -0
  808. package/src/network/discv5/worker.ts +137 -0
  809. package/src/network/events.ts +51 -0
  810. package/src/network/forks.ts +94 -0
  811. package/src/network/gossip/constants.ts +15 -0
  812. package/src/network/gossip/encoding.ts +111 -0
  813. package/src/network/gossip/errors.ts +7 -0
  814. package/src/network/gossip/gossipsub.ts +384 -0
  815. package/src/network/gossip/index.ts +4 -0
  816. package/src/network/gossip/interface.ts +215 -0
  817. package/src/network/gossip/metrics.ts +71 -0
  818. package/src/network/gossip/scoringParameters.ts +333 -0
  819. package/src/network/gossip/topic.ts +332 -0
  820. package/src/network/index.ts +8 -0
  821. package/src/network/interface.ts +134 -0
  822. package/src/network/libp2p/error.ts +55 -0
  823. package/src/network/libp2p/index.ts +153 -0
  824. package/src/network/metadata.ts +162 -0
  825. package/src/network/network.ts +767 -0
  826. package/src/network/networkConfig.ts +12 -0
  827. package/src/network/options.ts +70 -0
  828. package/src/network/peers/client.ts +29 -0
  829. package/src/network/peers/datastore.ts +188 -0
  830. package/src/network/peers/datastore_bun.ts +3 -0
  831. package/src/network/peers/discover.ts +647 -0
  832. package/src/network/peers/index.ts +2 -0
  833. package/src/network/peers/peerManager.ts +900 -0
  834. package/src/network/peers/peersData.ts +65 -0
  835. package/src/network/peers/score/constants.ts +34 -0
  836. package/src/network/peers/score/index.ts +4 -0
  837. package/src/network/peers/score/interface.ts +74 -0
  838. package/src/network/peers/score/score.ts +200 -0
  839. package/src/network/peers/score/store.ts +95 -0
  840. package/src/network/peers/score/utils.ts +37 -0
  841. package/src/network/peers/utils/assertPeerRelevance.ts +99 -0
  842. package/src/network/peers/utils/enrSubnetsDeserialize.ts +27 -0
  843. package/src/network/peers/utils/getConnectedPeerIds.ts +33 -0
  844. package/src/network/peers/utils/index.ts +4 -0
  845. package/src/network/peers/utils/prioritizePeers.ts +627 -0
  846. package/src/network/peers/utils/subnetMap.ts +88 -0
  847. package/src/network/processor/aggregatorTracker.ts +38 -0
  848. package/src/network/processor/extractSlotRootFns.ts +64 -0
  849. package/src/network/processor/gossipHandlers.ts +951 -0
  850. package/src/network/processor/gossipQueues/index.ts +114 -0
  851. package/src/network/processor/gossipQueues/indexed.ts +219 -0
  852. package/src/network/processor/gossipQueues/linear.ts +162 -0
  853. package/src/network/processor/gossipQueues/types.ts +57 -0
  854. package/src/network/processor/gossipValidatorFn.ts +142 -0
  855. package/src/network/processor/index.ts +496 -0
  856. package/src/network/processor/types.ts +27 -0
  857. package/src/network/reqresp/ReqRespBeaconNode.ts +373 -0
  858. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +101 -0
  859. package/src/network/reqresp/handlers/beaconBlocksByRoot.ts +49 -0
  860. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +114 -0
  861. package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +62 -0
  862. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +144 -0
  863. package/src/network/reqresp/handlers/dataColumnSidecarsByRoot.ts +88 -0
  864. package/src/network/reqresp/handlers/index.ts +78 -0
  865. package/src/network/reqresp/handlers/lightClientBootstrap.ts +31 -0
  866. package/src/network/reqresp/handlers/lightClientFinalityUpdate.ts +21 -0
  867. package/src/network/reqresp/handlers/lightClientOptimisticUpdate.ts +21 -0
  868. package/src/network/reqresp/handlers/lightClientUpdatesByRange.ts +39 -0
  869. package/src/network/reqresp/index.ts +2 -0
  870. package/src/network/reqresp/interface.ts +45 -0
  871. package/src/network/reqresp/protocols.ts +146 -0
  872. package/src/network/reqresp/rateLimit.ts +112 -0
  873. package/src/network/reqresp/score.ts +70 -0
  874. package/src/network/reqresp/types.ts +174 -0
  875. package/src/network/reqresp/utils/collect.ts +84 -0
  876. package/src/network/reqresp/utils/collectSequentialBlocksInRange.ts +57 -0
  877. package/src/network/reqresp/utils/dataColumnResponseValidation.ts +99 -0
  878. package/src/network/statusCache.ts +17 -0
  879. package/src/network/subnets/attnetsService.ts +382 -0
  880. package/src/network/subnets/index.ts +2 -0
  881. package/src/network/subnets/interface.ts +66 -0
  882. package/src/network/subnets/syncnetsService.ts +147 -0
  883. package/src/network/subnets/util.ts +63 -0
  884. package/src/network/util.ts +29 -0
  885. package/src/node/index.ts +2 -0
  886. package/src/node/nodejs.ts +349 -0
  887. package/src/node/notifier.ts +206 -0
  888. package/src/node/options.ts +51 -0
  889. package/src/node/utils/interop/deposits.ts +53 -0
  890. package/src/node/utils/interop/state.ts +59 -0
  891. package/src/node/utils/lightclient.ts +7 -0
  892. package/src/node/utils/state.ts +37 -0
  893. package/src/sync/backfill/backfill.ts +893 -0
  894. package/src/sync/backfill/errors.ts +23 -0
  895. package/src/sync/backfill/index.ts +1 -0
  896. package/src/sync/backfill/verify.ts +58 -0
  897. package/src/sync/constants.ts +71 -0
  898. package/src/sync/index.ts +2 -0
  899. package/src/sync/interface.ts +55 -0
  900. package/src/sync/options.ts +45 -0
  901. package/src/sync/range/batch.ts +455 -0
  902. package/src/sync/range/chain.ts +715 -0
  903. package/src/sync/range/range.ts +354 -0
  904. package/src/sync/range/utils/batches.ts +119 -0
  905. package/src/sync/range/utils/chainTarget.ts +62 -0
  906. package/src/sync/range/utils/hashBlocks.ts +27 -0
  907. package/src/sync/range/utils/index.ts +5 -0
  908. package/src/sync/range/utils/peerBalancer.ts +184 -0
  909. package/src/sync/range/utils/updateChains.ts +66 -0
  910. package/src/sync/sync.ts +290 -0
  911. package/src/sync/types.ts +57 -0
  912. package/src/sync/unknownBlock.ts +860 -0
  913. package/src/sync/utils/downloadByRange.ts +814 -0
  914. package/src/sync/utils/downloadByRoot.ts +568 -0
  915. package/src/sync/utils/pendingBlocksTree.ts +97 -0
  916. package/src/sync/utils/remoteSyncType.ts +144 -0
  917. package/src/util/address.ts +3 -0
  918. package/src/util/array.ts +311 -0
  919. package/src/util/asyncIterableToEvents.ts +164 -0
  920. package/src/util/binarySearch.ts +48 -0
  921. package/src/util/bitArray.ts +84 -0
  922. package/src/util/blobs.ts +210 -0
  923. package/src/util/bufferPool.ts +95 -0
  924. package/src/util/bytes.ts +11 -0
  925. package/src/util/chunkify.ts +27 -0
  926. package/src/util/clock.ts +212 -0
  927. package/src/util/dataColumns.ts +424 -0
  928. package/src/util/dependentRoot.ts +47 -0
  929. package/src/util/enum.ts +17 -0
  930. package/src/util/error.ts +56 -0
  931. package/src/util/eventLoop.ts +22 -0
  932. package/src/util/execution.ts +223 -0
  933. package/src/util/file.ts +52 -0
  934. package/src/util/forkChoice.ts +5 -0
  935. package/src/util/forkName.ts +20 -0
  936. package/src/util/graffiti.ts +39 -0
  937. package/src/util/hex.ts +9 -0
  938. package/src/util/index.ts +2 -0
  939. package/src/util/ip.ts +6 -0
  940. package/src/util/itTrigger.ts +49 -0
  941. package/src/util/kzg.ts +3 -0
  942. package/src/util/map.ts +77 -0
  943. package/src/util/metadata.ts +22 -0
  944. package/src/util/multifork.ts +69 -0
  945. package/src/util/numpy.ts +8 -0
  946. package/src/util/peerId.ts +16 -0
  947. package/src/util/profile.ts +54 -0
  948. package/src/util/promises.ts +14 -0
  949. package/src/util/queue/errors.ts +14 -0
  950. package/src/util/queue/fnQueue.ts +16 -0
  951. package/src/util/queue/index.ts +4 -0
  952. package/src/util/queue/itemQueue.ts +128 -0
  953. package/src/util/queue/options.ts +37 -0
  954. package/src/util/serializedCache.ts +20 -0
  955. package/src/util/set.ts +62 -0
  956. package/src/util/shuffle.ts +21 -0
  957. package/src/util/sortBy.ts +19 -0
  958. package/src/util/sszBytes.ts +481 -0
  959. package/src/util/strictEvents.ts +8 -0
  960. package/src/util/time.ts +13 -0
  961. package/src/util/timeSeries.ts +118 -0
  962. package/src/util/types.ts +31 -0
  963. package/src/util/workerEvents.ts +142 -0
  964. package/src/util/wrapError.ts +27 -0
@@ -0,0 +1,799 @@
1
+ import {ChainForkConfig} from "@lodestar/config";
2
+ import {
3
+ ForkName,
4
+ ForkPostBellatrix,
5
+ ForkPostDeneb,
6
+ ForkPostFulu,
7
+ ForkPreGloas,
8
+ ForkSeq,
9
+ isForkPostAltair,
10
+ isForkPostBellatrix,
11
+ isForkPostGloas,
12
+ } from "@lodestar/params";
13
+ import {
14
+ CachedBeaconStateAllForks,
15
+ CachedBeaconStateBellatrix,
16
+ CachedBeaconStateCapella,
17
+ CachedBeaconStateExecutions,
18
+ computeTimeAtSlot,
19
+ getCurrentEpoch,
20
+ getExpectedWithdrawals,
21
+ getRandaoMix,
22
+ isMergeTransitionComplete,
23
+ } from "@lodestar/state-transition";
24
+ import {
25
+ BLSPubkey,
26
+ BLSSignature,
27
+ BeaconBlock,
28
+ BeaconBlockBody,
29
+ BlindedBeaconBlock,
30
+ BlindedBeaconBlockBody,
31
+ BlobsBundle,
32
+ Bytes32,
33
+ ExecutionPayload,
34
+ ExecutionPayloadHeader,
35
+ Root,
36
+ RootHex,
37
+ SSEPayloadAttributes,
38
+ Slot,
39
+ ValidatorIndex,
40
+ Wei,
41
+ altair,
42
+ capella,
43
+ deneb,
44
+ electra,
45
+ fulu,
46
+ ssz,
47
+ sszTypesFor,
48
+ } from "@lodestar/types";
49
+ import {Logger, sleep, toHex, toPubkeyHex, toRootHex} from "@lodestar/utils";
50
+ import {ZERO_HASH, ZERO_HASH_HEX} from "../../constants/index.js";
51
+ import {IEth1ForBlockProduction} from "../../eth1/index.js";
52
+ import {numToQuantity} from "../../eth1/provider/utils.js";
53
+ import {
54
+ IExecutionBuilder,
55
+ IExecutionEngine,
56
+ PayloadAttributes,
57
+ PayloadId,
58
+ getExpectedGasLimit,
59
+ } from "../../execution/index.js";
60
+ import {fromGraffitiBytes} from "../../util/graffiti.js";
61
+ import {kzg} from "../../util/kzg.js";
62
+ import type {BeaconChain} from "../chain.js";
63
+ import {CommonBlockBody} from "../interface.js";
64
+ import {validateBlobsAndKzgCommitments, validateCellsAndKzgCommitments} from "./validateBlobsAndKzgCommitments.js";
65
+
66
+ // Time to provide the EL to generate a payload from new payload id
67
+ const PAYLOAD_GENERATION_TIME_MS = 500;
68
+
69
+ export enum PayloadPreparationType {
70
+ Fresh = "Fresh",
71
+ Cached = "Cached",
72
+ Reorged = "Reorged",
73
+ Blinded = "Blinded",
74
+ }
75
+
76
+ /**
77
+ * Block production steps tracked in metrics
78
+ */
79
+ export enum BlockProductionStep {
80
+ proposerSlashing = "proposerSlashing",
81
+ attesterSlashings = "attesterSlashings",
82
+ voluntaryExits = "voluntaryExits",
83
+ blsToExecutionChanges = "blsToExecutionChanges",
84
+ attestations = "attestations",
85
+ eth1DataAndDeposits = "eth1DataAndDeposits",
86
+ syncAggregate = "syncAggregate",
87
+ executionPayload = "executionPayload",
88
+ }
89
+
90
+ export type BlockAttributes = {
91
+ randaoReveal: BLSSignature;
92
+ graffiti: Bytes32;
93
+ slot: Slot;
94
+ parentBlockRoot: Root;
95
+ feeRecipient?: string;
96
+ };
97
+
98
+ export enum BlockType {
99
+ Full = "Full",
100
+ Blinded = "Blinded",
101
+ }
102
+ export type AssembledBodyType<T extends BlockType> = T extends BlockType.Full
103
+ ? BeaconBlockBody
104
+ : BlindedBeaconBlockBody;
105
+ export type AssembledBlockType<T extends BlockType> = T extends BlockType.Full ? BeaconBlock : BlindedBeaconBlock;
106
+
107
+ export type ProduceFullFulu = {
108
+ type: BlockType.Full;
109
+ fork: ForkPostFulu;
110
+ executionPayload: ExecutionPayload<ForkPostFulu>;
111
+ blobsBundle: BlobsBundle<ForkPostFulu>;
112
+ cells: fulu.Cell[][];
113
+ };
114
+ export type ProduceFullDeneb = {
115
+ type: BlockType.Full;
116
+ fork: ForkName.deneb | ForkName.electra;
117
+ executionPayload: ExecutionPayload<ForkPostDeneb>;
118
+ blobsBundle: BlobsBundle<ForkPostDeneb>;
119
+ };
120
+ export type ProduceFullBellatrix = {
121
+ type: BlockType.Full;
122
+ fork: ForkName.bellatrix | ForkName.capella;
123
+ executionPayload: ExecutionPayload<ForkPostBellatrix>;
124
+ };
125
+ export type ProduceFullPhase0 = {
126
+ type: BlockType.Full;
127
+ fork: ForkName.phase0 | ForkName.altair;
128
+ };
129
+ export type ProduceBlinded = {
130
+ type: BlockType.Blinded;
131
+ fork: ForkName;
132
+ };
133
+
134
+ // The results of block production returned by `produceBlockBody`
135
+ // The types are defined separately so typecasting can be used
136
+
137
+ /** The result of local block production, everything that's not the block itself */
138
+ export type ProduceResult =
139
+ | ProduceFullFulu
140
+ | ProduceFullDeneb
141
+ | ProduceFullBellatrix
142
+ | ProduceFullPhase0
143
+ | ProduceBlinded;
144
+
145
+ export async function produceBlockBody<T extends BlockType>(
146
+ this: BeaconChain,
147
+ blockType: T,
148
+ currentState: CachedBeaconStateAllForks,
149
+ blockAttr: BlockAttributes & {
150
+ proposerIndex: ValidatorIndex;
151
+ proposerPubKey: BLSPubkey;
152
+ commonBlockBodyPromise: Promise<CommonBlockBody>;
153
+ }
154
+ ): Promise<{
155
+ body: AssembledBodyType<T>;
156
+ produceResult: ProduceResult;
157
+ executionPayloadValue: Wei;
158
+ shouldOverrideBuilder?: boolean;
159
+ }> {
160
+ const {
161
+ slot: blockSlot,
162
+ feeRecipient: requestedFeeRecipient,
163
+ parentBlockRoot,
164
+ proposerIndex,
165
+ proposerPubKey,
166
+ commonBlockBodyPromise,
167
+ } = blockAttr;
168
+ let executionPayloadValue: Wei;
169
+ let blockBody: AssembledBodyType<T>;
170
+ // even though shouldOverrideBuilder is relevant for the engine response, for simplicity of typing
171
+ // we just return it undefined for the builder which anyway doesn't get consumed downstream
172
+ let shouldOverrideBuilder: boolean | undefined;
173
+ const fork = currentState.config.getForkName(blockSlot);
174
+ const produceResult = {
175
+ type: blockType,
176
+ fork,
177
+ } as ProduceResult;
178
+
179
+ const logMeta: Record<string, string | number | bigint> = {
180
+ fork,
181
+ blockType,
182
+ slot: blockSlot,
183
+ };
184
+ this.logger.verbose("Producing beacon block body", logMeta);
185
+
186
+ if (isForkPostGloas(fork)) {
187
+ // TODO GLOAS: Set body.signedExecutionPayloadBid and body.payloadAttestation
188
+ const commonBlockBody = await commonBlockBodyPromise;
189
+ blockBody = Object.assign({}, commonBlockBody) as AssembledBodyType<T>;
190
+ executionPayloadValue = BigInt(0);
191
+
192
+ // We don't deal with blinded blocks, execution engine, blobs and execution requests post-gloas
193
+ } else if (isForkPostBellatrix(fork)) {
194
+ const safeBlockHash = this.forkChoice.getJustifiedBlock().executionPayloadBlockHash ?? ZERO_HASH_HEX;
195
+ const finalizedBlockHash = this.forkChoice.getFinalizedBlock().executionPayloadBlockHash ?? ZERO_HASH_HEX;
196
+ const feeRecipient = requestedFeeRecipient ?? this.beaconProposerCache.getOrDefault(proposerIndex);
197
+ const feeRecipientType = requestedFeeRecipient
198
+ ? "requested"
199
+ : this.beaconProposerCache.get(proposerIndex)
200
+ ? "cached"
201
+ : "default";
202
+
203
+ Object.assign(logMeta, {feeRecipientType, feeRecipient});
204
+
205
+ if (blockType === BlockType.Blinded) {
206
+ if (!this.executionBuilder) throw Error("External builder not configured");
207
+ const executionBuilder = this.executionBuilder;
208
+
209
+ const builderPromise = (async () => {
210
+ const endExecutionPayloadHeader = this.metrics?.builderBlockProductionTimeSteps.startTimer();
211
+ // This path will not be used in the production, but is here just for merge mock
212
+ // tests because merge-mock requires an fcU to be issued prior to fetch payload
213
+ // header.
214
+ if (executionBuilder.issueLocalFcUWithFeeRecipient !== undefined) {
215
+ await prepareExecutionPayload(
216
+ this,
217
+ this.logger,
218
+ fork,
219
+ parentBlockRoot,
220
+ safeBlockHash,
221
+ finalizedBlockHash ?? ZERO_HASH_HEX,
222
+ currentState as CachedBeaconStateBellatrix,
223
+ executionBuilder.issueLocalFcUWithFeeRecipient
224
+ );
225
+ }
226
+
227
+ // For MeV boost integration, this is where the execution header will be
228
+ // fetched from the payload id and a blinded block will be produced instead of
229
+ // fullblock for the validator to sign
230
+ this.logger.verbose("Fetching execution payload header from builder", {
231
+ slot: blockSlot,
232
+ proposerPubKey: toHex(proposerPubKey),
233
+ });
234
+ const headerRes = await prepareExecutionPayloadHeader(
235
+ this,
236
+ fork,
237
+ currentState as CachedBeaconStateBellatrix,
238
+ proposerPubKey
239
+ );
240
+
241
+ endExecutionPayloadHeader?.({
242
+ step: BlockProductionStep.executionPayload,
243
+ });
244
+
245
+ return headerRes;
246
+ })();
247
+
248
+ const [builderRes, commonBlockBody] = await Promise.all([builderPromise, commonBlockBodyPromise]);
249
+ blockBody = Object.assign({}, commonBlockBody) as AssembledBodyType<BlockType.Blinded>;
250
+
251
+ (blockBody as BlindedBeaconBlockBody).executionPayloadHeader = builderRes.header;
252
+ executionPayloadValue = builderRes.executionPayloadValue;
253
+
254
+ const fetchedTime = Date.now() / 1000 - computeTimeAtSlot(this.config, blockSlot, this.genesisTime);
255
+ const prepType = PayloadPreparationType.Blinded;
256
+ this.metrics?.blockPayload.payloadFetchedTime.observe({prepType}, fetchedTime);
257
+ this.logger.verbose("Fetched execution payload header from builder", {
258
+ slot: blockSlot,
259
+ executionPayloadValue,
260
+ prepType,
261
+ fetchedTime,
262
+ });
263
+
264
+ const targetGasLimit = executionBuilder.getValidatorRegistration(proposerPubKey)?.gasLimit;
265
+ if (!targetGasLimit) {
266
+ // This should only happen if cache was cleared due to restart of beacon node
267
+ this.logger.warn("Failed to get validator registration, could not check header gas limit", {
268
+ slot: blockSlot,
269
+ proposerIndex,
270
+ proposerPubKey: toPubkeyHex(proposerPubKey),
271
+ });
272
+ } else {
273
+ const headerGasLimit = builderRes.header.gasLimit;
274
+ const parentGasLimit = (currentState as CachedBeaconStateBellatrix).latestExecutionPayloadHeader.gasLimit;
275
+ const expectedGasLimit = getExpectedGasLimit(parentGasLimit, targetGasLimit);
276
+
277
+ const lowerBound = Math.min(parentGasLimit, expectedGasLimit);
278
+ const upperBound = Math.max(parentGasLimit, expectedGasLimit);
279
+
280
+ if (headerGasLimit < lowerBound || headerGasLimit > upperBound) {
281
+ throw Error(
282
+ `Header gas limit ${headerGasLimit} is outside of acceptable range [${lowerBound}, ${upperBound}]`
283
+ );
284
+ }
285
+
286
+ if (headerGasLimit !== expectedGasLimit) {
287
+ this.logger.warn("Header gas limit does not match expected value", {
288
+ slot: blockSlot,
289
+ headerGasLimit,
290
+ expectedGasLimit,
291
+ parentGasLimit,
292
+ targetGasLimit,
293
+ });
294
+ }
295
+ }
296
+
297
+ if (ForkSeq[fork] >= ForkSeq.deneb) {
298
+ const {blobKzgCommitments} = builderRes;
299
+ if (blobKzgCommitments === undefined) {
300
+ throw Error(`Invalid builder getHeader response for fork=${fork}, missing blobKzgCommitments`);
301
+ }
302
+
303
+ (blockBody as deneb.BlindedBeaconBlockBody).blobKzgCommitments = blobKzgCommitments;
304
+ Object.assign(logMeta, {blobs: blobKzgCommitments.length});
305
+ }
306
+
307
+ if (ForkSeq[fork] >= ForkSeq.electra) {
308
+ const {executionRequests} = builderRes;
309
+ if (executionRequests === undefined) {
310
+ throw Error(`Invalid builder getHeader response for fork=${fork}, missing executionRequests`);
311
+ }
312
+ (blockBody as electra.BlindedBeaconBlockBody).executionRequests = executionRequests;
313
+ }
314
+ }
315
+
316
+ // blockType === BlockType.Full
317
+ else {
318
+ // enginePromise only supports pre-gloas
319
+ const enginePromise = (async () => {
320
+ const endExecutionPayload = this.metrics?.executionBlockProductionTimeSteps.startTimer();
321
+
322
+ this.logger.verbose("Preparing execution payload from engine", {
323
+ slot: blockSlot,
324
+ parentBlockRoot: toRootHex(parentBlockRoot),
325
+ feeRecipient,
326
+ });
327
+ // https://github.com/ethereum/consensus-specs/blob/dev/specs/deneb/validator.md#constructing-the-beaconblockbody
328
+ const prepareRes = await prepareExecutionPayload(
329
+ this,
330
+ this.logger,
331
+ fork,
332
+ parentBlockRoot,
333
+ safeBlockHash,
334
+ finalizedBlockHash ?? ZERO_HASH_HEX,
335
+ currentState as CachedBeaconStateExecutions,
336
+ feeRecipient
337
+ );
338
+
339
+ if (prepareRes.isPremerge) {
340
+ return {
341
+ ...prepareRes,
342
+ executionPayload: sszTypesFor(fork).ExecutionPayload.defaultValue(),
343
+ executionPayloadValue: BigInt(0),
344
+ };
345
+ }
346
+
347
+ const {prepType, payloadId} = prepareRes;
348
+ Object.assign(logMeta, {executionPayloadPrepType: prepType});
349
+
350
+ if (prepType !== PayloadPreparationType.Cached) {
351
+ // Wait for 500ms to allow EL to add some txs to the payload
352
+ // the pitfalls of this have been put forward here, but 500ms delay for block proposal
353
+ // seems marginal even with unhealthy network
354
+ //
355
+ // See: https://discord.com/channels/595666850260713488/892088344438255616/1009882079632314469
356
+ await sleep(PAYLOAD_GENERATION_TIME_MS);
357
+ }
358
+
359
+ this.logger.verbose("Fetching execution payload from engine", {slot: blockSlot, payloadId});
360
+ const payloadRes = await this.executionEngine.getPayload(fork, payloadId);
361
+
362
+ endExecutionPayload?.({
363
+ step: BlockProductionStep.executionPayload,
364
+ });
365
+
366
+ return {...prepareRes, ...payloadRes};
367
+ })().catch((e) => {
368
+ // catch payload fetch here, because there is still a recovery path possible if we
369
+ // are pre-merge. We don't care the same for builder segment as the execution block
370
+ // will takeover if the builder flow was activated and errors
371
+ this.metrics?.blockPayload.payloadFetchErrors.inc();
372
+
373
+ if (!isMergeTransitionComplete(currentState as CachedBeaconStateBellatrix)) {
374
+ this.logger?.warn(
375
+ "Fetch payload from the execution failed, however since we are still pre-merge proceeding with an empty one.",
376
+ {},
377
+ e as Error
378
+ );
379
+ // ok we don't have an execution payload here, so we can assign an empty one
380
+ // if pre-merge
381
+ return {
382
+ isPremerge: true as const,
383
+ executionPayload: sszTypesFor(fork).ExecutionPayload.defaultValue(),
384
+ executionPayloadValue: BigInt(0),
385
+ };
386
+ }
387
+ // since merge transition is complete, we need a valid payload even if with an
388
+ // empty (transactions) one. defaultValue isn't gonna cut it!
389
+ throw e;
390
+ });
391
+
392
+ const [engineRes, commonBlockBody] = await Promise.all([enginePromise, commonBlockBodyPromise]);
393
+ blockBody = Object.assign({}, commonBlockBody) as AssembledBodyType<BlockType.Blinded>;
394
+
395
+ if (engineRes.isPremerge) {
396
+ (blockBody as BeaconBlockBody<ForkPostBellatrix & ForkPreGloas>).executionPayload = engineRes.executionPayload;
397
+ executionPayloadValue = engineRes.executionPayloadValue;
398
+ } else {
399
+ const {prepType, payloadId, executionPayload, blobsBundle, executionRequests} = engineRes;
400
+ shouldOverrideBuilder = engineRes.shouldOverrideBuilder;
401
+
402
+ (blockBody as BeaconBlockBody<ForkPostBellatrix & ForkPreGloas>).executionPayload = executionPayload;
403
+ (produceResult as ProduceFullBellatrix).executionPayload = executionPayload;
404
+ executionPayloadValue = engineRes.executionPayloadValue;
405
+ Object.assign(logMeta, {transactions: executionPayload.transactions.length, shouldOverrideBuilder});
406
+
407
+ const fetchedTime = Date.now() / 1000 - computeTimeAtSlot(this.config, blockSlot, this.genesisTime);
408
+ this.metrics?.blockPayload.payloadFetchedTime.observe({prepType}, fetchedTime);
409
+ this.logger.verbose("Fetched execution payload from engine", {
410
+ slot: blockSlot,
411
+ executionPayloadValue,
412
+ prepType,
413
+ payloadId,
414
+ fetchedTime,
415
+ executionHeadBlockHash: toRootHex(engineRes.executionPayload.blockHash),
416
+ });
417
+ if (executionPayload.transactions.length === 0) {
418
+ this.metrics?.blockPayload.emptyPayloads.inc({prepType});
419
+ }
420
+
421
+ if (ForkSeq[fork] >= ForkSeq.fulu) {
422
+ if (blobsBundle === undefined) {
423
+ throw Error(`Missing blobsBundle response from getPayload at fork=${fork}`);
424
+ }
425
+ // NOTE: Even though the fulu.BlobsBundle type is superficially the same as deneb.BlobsBundle, it is NOT.
426
+ // In fulu, proofs are _cell_ proofs, vs in deneb they are _blob_ proofs.
427
+
428
+ const cells = blobsBundle.blobs.map((blob) => kzg.computeCells(blob));
429
+ if (this.opts.sanityCheckExecutionEngineBlobs) {
430
+ await validateCellsAndKzgCommitments(blobsBundle.commitments, blobsBundle.proofs, cells);
431
+ }
432
+
433
+ (blockBody as deneb.BeaconBlockBody).blobKzgCommitments = blobsBundle.commitments;
434
+ (produceResult as ProduceFullFulu).blobsBundle = blobsBundle;
435
+ (produceResult as ProduceFullFulu).cells = cells;
436
+
437
+ Object.assign(logMeta, {blobs: blobsBundle.commitments.length});
438
+ } else if (ForkSeq[fork] >= ForkSeq.deneb) {
439
+ if (blobsBundle === undefined) {
440
+ throw Error(`Missing blobsBundle response from getPayload at fork=${fork}`);
441
+ }
442
+
443
+ if (this.opts.sanityCheckExecutionEngineBlobs) {
444
+ await validateBlobsAndKzgCommitments(blobsBundle.commitments, blobsBundle.proofs, blobsBundle.blobs);
445
+ }
446
+
447
+ (blockBody as deneb.BeaconBlockBody).blobKzgCommitments = blobsBundle.commitments;
448
+ (produceResult as ProduceFullDeneb).blobsBundle = blobsBundle;
449
+
450
+ Object.assign(logMeta, {blobs: blobsBundle.commitments.length});
451
+ }
452
+
453
+ if (ForkSeq[fork] >= ForkSeq.electra) {
454
+ if (executionRequests === undefined) {
455
+ throw Error(`Missing executionRequests response from getPayload at fork=${fork}`);
456
+ }
457
+ (blockBody as electra.BeaconBlockBody).executionRequests = executionRequests;
458
+ }
459
+ }
460
+ }
461
+ } else {
462
+ const commonBlockBody = await commonBlockBodyPromise;
463
+ blockBody = Object.assign({}, commonBlockBody) as AssembledBodyType<T>;
464
+ executionPayloadValue = BigInt(0);
465
+ }
466
+
467
+ const {graffiti, attestations, deposits, voluntaryExits, attesterSlashings, proposerSlashings} = blockBody;
468
+
469
+ Object.assign(logMeta, {
470
+ graffiti: fromGraffitiBytes(graffiti),
471
+ attestations: attestations.length,
472
+ deposits: deposits.length,
473
+ voluntaryExits: voluntaryExits.length,
474
+ attesterSlashings: attesterSlashings.length,
475
+ proposerSlashings: proposerSlashings.length,
476
+ });
477
+
478
+ if (isForkPostAltair(fork)) {
479
+ const {syncAggregate} = blockBody as altair.BeaconBlockBody;
480
+ Object.assign(logMeta, {
481
+ syncAggregateParticipants: syncAggregate.syncCommitteeBits.getTrueBitIndexes().length,
482
+ });
483
+ }
484
+
485
+ if (ForkSeq[fork] >= ForkSeq.capella) {
486
+ const {blsToExecutionChanges, executionPayload} = blockBody as capella.BeaconBlockBody;
487
+ Object.assign(logMeta, {
488
+ blsToExecutionChanges: blsToExecutionChanges.length,
489
+ });
490
+
491
+ // withdrawals are only available in full body
492
+ if (blockType === BlockType.Full) {
493
+ Object.assign(logMeta, {
494
+ withdrawals: executionPayload.withdrawals.length,
495
+ });
496
+ }
497
+ }
498
+
499
+ Object.assign(logMeta, {executionPayloadValue});
500
+ this.logger.verbose("Produced beacon block body", logMeta);
501
+
502
+ return {body: blockBody as AssembledBodyType<T>, produceResult, executionPayloadValue, shouldOverrideBuilder};
503
+ }
504
+
505
+ /**
506
+ * Produce ExecutionPayload for pre-merge, merge, and post-merge.
507
+ *
508
+ * Expects `eth1MergeBlockFinder` to be actively searching for blocks well in advance to being called.
509
+ *
510
+ * @returns PayloadId = pow block found, null = pow NOT found
511
+ */
512
+ export async function prepareExecutionPayload(
513
+ chain: {
514
+ eth1: IEth1ForBlockProduction;
515
+ executionEngine: IExecutionEngine;
516
+ config: ChainForkConfig;
517
+ },
518
+ logger: Logger,
519
+ fork: ForkPostBellatrix,
520
+ parentBlockRoot: Root,
521
+ safeBlockHash: RootHex,
522
+ finalizedBlockHash: RootHex,
523
+ state: CachedBeaconStateExecutions,
524
+ suggestedFeeRecipient: string
525
+ ): Promise<{isPremerge: true} | {isPremerge: false; prepType: PayloadPreparationType; payloadId: PayloadId}> {
526
+ const parentHashRes = await getExecutionPayloadParentHash(chain, state);
527
+ if (parentHashRes.isPremerge) {
528
+ // Return null only if the execution is pre-merge
529
+ return {isPremerge: true};
530
+ }
531
+
532
+ const {parentHash} = parentHashRes;
533
+ const timestamp = computeTimeAtSlot(chain.config, state.slot, state.genesisTime);
534
+ const prevRandao = getRandaoMix(state, state.epochCtx.epoch);
535
+
536
+ const payloadIdCached = chain.executionEngine.payloadIdCache.get({
537
+ headBlockHash: toRootHex(parentHash),
538
+ finalizedBlockHash,
539
+ timestamp: numToQuantity(timestamp),
540
+ prevRandao: toHex(prevRandao),
541
+ suggestedFeeRecipient,
542
+ });
543
+
544
+ // prepareExecutionPayload will throw error via notifyForkchoiceUpdate if
545
+ // the EL returns Syncing on this request to prepare a payload
546
+ // TODO: Handle only this case, DO NOT put a generic try / catch that discards all errors
547
+ let payloadId: PayloadId | null;
548
+ let prepType: PayloadPreparationType;
549
+
550
+ if (payloadIdCached) {
551
+ payloadId = payloadIdCached;
552
+ prepType = PayloadPreparationType.Cached;
553
+ } else {
554
+ // If there was a payload assigned to this timestamp, it would imply that there some sort
555
+ // of payload reorg, i.e. head, fee recipient or any other fcu param changed
556
+ if (chain.executionEngine.payloadIdCache.hasPayload({timestamp: numToQuantity(timestamp)})) {
557
+ prepType = PayloadPreparationType.Reorged;
558
+ } else {
559
+ prepType = PayloadPreparationType.Fresh;
560
+ }
561
+
562
+ const attributes: PayloadAttributes = preparePayloadAttributes(fork, chain, {
563
+ prepareState: state,
564
+ prepareSlot: state.slot,
565
+ parentBlockRoot,
566
+ feeRecipient: suggestedFeeRecipient,
567
+ });
568
+
569
+ payloadId = await chain.executionEngine.notifyForkchoiceUpdate(
570
+ fork,
571
+ toRootHex(parentHash),
572
+ safeBlockHash,
573
+ finalizedBlockHash,
574
+ attributes
575
+ );
576
+ logger.verbose("Prepared payload id from execution engine", {payloadId});
577
+ }
578
+
579
+ // Should never happen, notifyForkchoiceUpdate() with payload attributes always
580
+ // returns payloadId
581
+ if (payloadId === null) {
582
+ throw Error("notifyForkchoiceUpdate returned payloadId null");
583
+ }
584
+
585
+ // We are only returning payloadId here because prepareExecutionPayload is also called from
586
+ // prepareNextSlot, which is an advance call to execution engine to start building payload
587
+ // Actual payload isn't produced till getPayload is called.
588
+ return {isPremerge: false, payloadId, prepType};
589
+ }
590
+
591
+ async function prepareExecutionPayloadHeader(
592
+ chain: {
593
+ eth1: IEth1ForBlockProduction;
594
+ executionBuilder?: IExecutionBuilder;
595
+ config: ChainForkConfig;
596
+ },
597
+ fork: ForkPostBellatrix,
598
+ state: CachedBeaconStateBellatrix,
599
+ proposerPubKey: BLSPubkey
600
+ ): Promise<{
601
+ header: ExecutionPayloadHeader;
602
+ executionPayloadValue: Wei;
603
+ blobKzgCommitments?: deneb.BlobKzgCommitments;
604
+ executionRequests?: electra.ExecutionRequests;
605
+ }> {
606
+ if (!chain.executionBuilder) {
607
+ throw Error("executionBuilder required");
608
+ }
609
+
610
+ const parentHashRes = await getExecutionPayloadParentHash(chain, state);
611
+ if (parentHashRes.isPremerge) {
612
+ throw Error("External builder disabled pre-merge");
613
+ }
614
+
615
+ const {parentHash} = parentHashRes;
616
+ return chain.executionBuilder.getHeader(fork, state.slot, parentHash, proposerPubKey);
617
+ }
618
+
619
+ export async function getExecutionPayloadParentHash(
620
+ chain: {
621
+ eth1: IEth1ForBlockProduction;
622
+ config: ChainForkConfig;
623
+ },
624
+ state: CachedBeaconStateExecutions
625
+ ): Promise<{isPremerge: true} | {isPremerge: false; parentHash: Root}> {
626
+ // Use different POW block hash parent for block production based on merge status.
627
+ // Returned value of null == using an empty ExecutionPayload value
628
+ if (isMergeTransitionComplete(state)) {
629
+ // Post-merge, normal payload
630
+ return {isPremerge: false, parentHash: state.latestExecutionPayloadHeader.blockHash};
631
+ }
632
+
633
+ if (
634
+ !ssz.Root.equals(chain.config.TERMINAL_BLOCK_HASH, ZERO_HASH) &&
635
+ getCurrentEpoch(state) < chain.config.TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH
636
+ ) {
637
+ throw new Error(
638
+ `InvalidMergeTBH epoch: expected >= ${
639
+ chain.config.TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH
640
+ }, actual: ${getCurrentEpoch(state)}`
641
+ );
642
+ }
643
+
644
+ const terminalPowBlockHash = await chain.eth1.getTerminalPowBlock();
645
+ if (terminalPowBlockHash === null) {
646
+ // Pre-merge, no prepare payload call is needed
647
+ return {isPremerge: true};
648
+ }
649
+ // Signify merge via producing on top of the last PoW block
650
+ return {isPremerge: false, parentHash: terminalPowBlockHash};
651
+ }
652
+
653
+ export async function getPayloadAttributesForSSE(
654
+ fork: ForkPostBellatrix,
655
+ chain: {
656
+ eth1: IEth1ForBlockProduction;
657
+ config: ChainForkConfig;
658
+ },
659
+ {
660
+ prepareState,
661
+ prepareSlot,
662
+ parentBlockRoot,
663
+ feeRecipient,
664
+ }: {prepareState: CachedBeaconStateExecutions; prepareSlot: Slot; parentBlockRoot: Root; feeRecipient: string}
665
+ ): Promise<SSEPayloadAttributes> {
666
+ const parentHashRes = await getExecutionPayloadParentHash(chain, prepareState);
667
+
668
+ if (!parentHashRes.isPremerge) {
669
+ const {parentHash} = parentHashRes;
670
+ const payloadAttributes = preparePayloadAttributes(fork, chain, {
671
+ prepareState,
672
+ prepareSlot,
673
+ parentBlockRoot,
674
+ feeRecipient,
675
+ });
676
+
677
+ const ssePayloadAttributes: SSEPayloadAttributes = {
678
+ proposerIndex: prepareState.epochCtx.getBeaconProposer(prepareSlot),
679
+ proposalSlot: prepareSlot,
680
+ parentBlockNumber: prepareState.latestExecutionPayloadHeader.blockNumber,
681
+ parentBlockRoot,
682
+ parentBlockHash: parentHash,
683
+ payloadAttributes,
684
+ };
685
+ return ssePayloadAttributes;
686
+ }
687
+
688
+ throw Error("The execution is still pre-merge");
689
+ }
690
+
691
+ function preparePayloadAttributes(
692
+ fork: ForkPostBellatrix,
693
+ chain: {
694
+ config: ChainForkConfig;
695
+ },
696
+ {
697
+ prepareState,
698
+ prepareSlot,
699
+ parentBlockRoot,
700
+ feeRecipient,
701
+ }: {
702
+ prepareState: CachedBeaconStateExecutions;
703
+ prepareSlot: Slot;
704
+ parentBlockRoot: Root;
705
+ feeRecipient: string;
706
+ }
707
+ ): SSEPayloadAttributes["payloadAttributes"] {
708
+ const timestamp = computeTimeAtSlot(chain.config, prepareSlot, prepareState.genesisTime);
709
+ const prevRandao = getRandaoMix(prepareState, prepareState.epochCtx.epoch);
710
+ const payloadAttributes = {
711
+ timestamp,
712
+ prevRandao,
713
+ suggestedFeeRecipient: feeRecipient,
714
+ };
715
+
716
+ if (ForkSeq[fork] >= ForkSeq.capella) {
717
+ // withdrawals logic is now fork aware as it changes on electra fork post capella
718
+ (payloadAttributes as capella.SSEPayloadAttributes["payloadAttributes"]).withdrawals = getExpectedWithdrawals(
719
+ ForkSeq[fork],
720
+ prepareState as CachedBeaconStateCapella
721
+ ).withdrawals;
722
+ }
723
+
724
+ if (ForkSeq[fork] >= ForkSeq.deneb) {
725
+ (payloadAttributes as deneb.SSEPayloadAttributes["payloadAttributes"]).parentBeaconBlockRoot = parentBlockRoot;
726
+ }
727
+
728
+ return payloadAttributes;
729
+ }
730
+
731
+ export async function produceCommonBlockBody<T extends BlockType>(
732
+ this: BeaconChain,
733
+ blockType: T,
734
+ currentState: CachedBeaconStateAllForks,
735
+ {randaoReveal, graffiti, slot, parentBlockRoot}: BlockAttributes
736
+ ): Promise<CommonBlockBody> {
737
+ const stepsMetrics =
738
+ blockType === BlockType.Full
739
+ ? this.metrics?.executionBlockProductionTimeSteps
740
+ : this.metrics?.builderBlockProductionTimeSteps;
741
+
742
+ const fork = currentState.config.getForkName(slot);
743
+
744
+ // TODO:
745
+ // Iterate through the naive aggregation pool and ensure all the attestations from there
746
+ // are included in the operation pool.
747
+ // for (const attestation of db.attestationPool.getAll()) {
748
+ // try {
749
+ // opPool.insertAttestation(attestation);
750
+ // } catch (e) {
751
+ // // Don't stop block production if there's an error, just create a log.
752
+ // logger.error("Attestation did not transfer to op pool", {}, e);
753
+ // }
754
+ // }
755
+ const [attesterSlashings, proposerSlashings, voluntaryExits, blsToExecutionChanges] =
756
+ this.opPool.getSlashingsAndExits(currentState, blockType, this.metrics);
757
+
758
+ const endAttestations = stepsMetrics?.startTimer();
759
+ const attestations = this.aggregatedAttestationPool.getAttestationsForBlock(fork, this.forkChoice, currentState);
760
+ endAttestations?.({
761
+ step: BlockProductionStep.attestations,
762
+ });
763
+
764
+ const endEth1DataAndDeposits = stepsMetrics?.startTimer();
765
+ const {eth1Data, deposits} = await this.eth1.getEth1DataAndDeposits(currentState);
766
+ endEth1DataAndDeposits?.({
767
+ step: BlockProductionStep.eth1DataAndDeposits,
768
+ });
769
+
770
+ const blockBody: Omit<CommonBlockBody, "blsToExecutionChanges" | "syncAggregate"> = {
771
+ randaoReveal,
772
+ graffiti,
773
+ eth1Data,
774
+ proposerSlashings,
775
+ attesterSlashings,
776
+ attestations,
777
+ deposits,
778
+ voluntaryExits,
779
+ };
780
+
781
+ if (ForkSeq[fork] >= ForkSeq.capella) {
782
+ (blockBody as CommonBlockBody).blsToExecutionChanges = blsToExecutionChanges;
783
+ }
784
+
785
+ const endSyncAggregate = stepsMetrics?.startTimer();
786
+ if (ForkSeq[fork] >= ForkSeq.altair) {
787
+ const previousSlot = slot - 1;
788
+ const syncAggregate = this.syncContributionAndProofPool.getAggregate(previousSlot, parentBlockRoot);
789
+ this.metrics?.production.producedSyncAggregateParticipants.observe(
790
+ syncAggregate.syncCommitteeBits.getTrueBitIndexes().length
791
+ );
792
+ (blockBody as CommonBlockBody).syncAggregate = syncAggregate;
793
+ }
794
+ endSyncAggregate?.({
795
+ step: BlockProductionStep.syncAggregate,
796
+ });
797
+
798
+ return blockBody as CommonBlockBody;
799
+ }