@lodestar/beacon-node 1.41.0-dev.f36ec31497 → 1.41.0-dev.f7a5f4ddda

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 (684) hide show
  1. package/lib/api/impl/api.js.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.d.ts +1 -1
  3. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  4. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  5. package/lib/api/impl/beacon/blocks/utils.js.map +1 -1
  6. package/lib/api/impl/beacon/index.js.map +1 -1
  7. package/lib/api/impl/beacon/pool/index.d.ts +1 -1
  8. package/lib/api/impl/beacon/pool/index.d.ts.map +1 -1
  9. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  10. package/lib/api/impl/beacon/rewards/index.d.ts +1 -1
  11. package/lib/api/impl/beacon/rewards/index.d.ts.map +1 -1
  12. package/lib/api/impl/beacon/rewards/index.js.map +1 -1
  13. package/lib/api/impl/beacon/state/index.d.ts +1 -1
  14. package/lib/api/impl/beacon/state/index.d.ts.map +1 -1
  15. package/lib/api/impl/beacon/state/index.js.map +1 -1
  16. package/lib/api/impl/beacon/state/utils.js.map +1 -1
  17. package/lib/api/impl/config/constants.js.map +1 -1
  18. package/lib/api/impl/config/index.js.map +1 -1
  19. package/lib/api/impl/debug/index.d.ts +1 -1
  20. package/lib/api/impl/debug/index.d.ts.map +1 -1
  21. package/lib/api/impl/debug/index.js.map +1 -1
  22. package/lib/api/impl/errors.d.ts.map +1 -1
  23. package/lib/api/impl/errors.js.map +1 -1
  24. package/lib/api/impl/events/index.d.ts +1 -1
  25. package/lib/api/impl/events/index.d.ts.map +1 -1
  26. package/lib/api/impl/events/index.js.map +1 -1
  27. package/lib/api/impl/lightclient/index.d.ts +1 -1
  28. package/lib/api/impl/lightclient/index.d.ts.map +1 -1
  29. package/lib/api/impl/lightclient/index.js.map +1 -1
  30. package/lib/api/impl/lodestar/index.d.ts +1 -1
  31. package/lib/api/impl/lodestar/index.d.ts.map +1 -1
  32. package/lib/api/impl/lodestar/index.js.map +1 -1
  33. package/lib/api/impl/node/index.js.map +1 -1
  34. package/lib/api/impl/node/utils.js.map +1 -1
  35. package/lib/api/impl/proof/index.js.map +1 -1
  36. package/lib/api/impl/utils.js.map +1 -1
  37. package/lib/api/impl/validator/index.js +4 -2
  38. package/lib/api/impl/validator/index.js.map +1 -1
  39. package/lib/api/impl/validator/utils.d.ts +1 -1
  40. package/lib/api/impl/validator/utils.d.ts.map +1 -1
  41. package/lib/api/impl/validator/utils.js.map +1 -1
  42. package/lib/api/rest/activeSockets.d.ts.map +1 -1
  43. package/lib/api/rest/activeSockets.js.map +1 -1
  44. package/lib/api/rest/base.d.ts.map +1 -1
  45. package/lib/api/rest/base.js.map +1 -1
  46. package/lib/api/rest/index.d.ts.map +1 -1
  47. package/lib/api/rest/index.js.map +1 -1
  48. package/lib/api/rest/swaggerUI.js.map +1 -1
  49. package/lib/bun-wrappers/prometheus-gc-stats.js.map +1 -1
  50. package/lib/chain/ColumnReconstructionTracker.d.ts.map +1 -1
  51. package/lib/chain/ColumnReconstructionTracker.js.map +1 -1
  52. package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
  53. package/lib/chain/GetBlobsTracker.js.map +1 -1
  54. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  55. package/lib/chain/archiveStore/archiveStore.js +2 -1
  56. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  57. package/lib/chain/archiveStore/historicalState/getHistoricalState.js.map +1 -1
  58. package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts.map +1 -1
  59. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js.map +1 -1
  60. package/lib/chain/archiveStore/historicalState/metrics.js.map +1 -1
  61. package/lib/chain/archiveStore/historicalState/types.js +2 -1
  62. package/lib/chain/archiveStore/historicalState/types.js.map +1 -1
  63. package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
  64. package/lib/chain/archiveStore/interface.js +2 -1
  65. package/lib/chain/archiveStore/interface.js.map +1 -1
  66. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts +1 -1
  67. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts.map +1 -1
  68. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js +2 -1
  69. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js.map +1 -1
  70. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +3 -8
  71. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -1
  72. package/lib/chain/archiveStore/utils/archiveBlocks.js +1 -1
  73. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  74. package/lib/chain/archiveStore/utils/archivePayloads.js.map +1 -1
  75. package/lib/chain/archiveStore/utils/pruneHistory.js.map +1 -1
  76. package/lib/chain/archiveStore/utils/updateBackfillRange.js.map +1 -1
  77. package/lib/chain/balancesCache.d.ts.map +1 -1
  78. package/lib/chain/balancesCache.js.map +1 -1
  79. package/lib/chain/beaconProposerCache.d.ts.map +1 -1
  80. package/lib/chain/beaconProposerCache.js.map +1 -1
  81. package/lib/chain/blocks/blockInput/blockInput.d.ts +5 -0
  82. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
  83. package/lib/chain/blocks/blockInput/blockInput.js +24 -0
  84. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  85. package/lib/chain/blocks/blockInput/errors.js +2 -1
  86. package/lib/chain/blocks/blockInput/errors.js.map +1 -1
  87. package/lib/chain/blocks/blockInput/types.d.ts +16 -0
  88. package/lib/chain/blocks/blockInput/types.d.ts.map +1 -1
  89. package/lib/chain/blocks/blockInput/types.js +4 -2
  90. package/lib/chain/blocks/blockInput/types.js.map +1 -1
  91. package/lib/chain/blocks/blockInput/utils.js.map +1 -1
  92. package/lib/chain/blocks/importBlock.js +1 -1
  93. package/lib/chain/blocks/importBlock.js.map +1 -1
  94. package/lib/chain/blocks/index.d.ts.map +1 -1
  95. package/lib/chain/blocks/index.js.map +1 -1
  96. package/lib/chain/blocks/types.js +6 -3
  97. package/lib/chain/blocks/types.js.map +1 -1
  98. package/lib/chain/blocks/utils/chainSegment.js.map +1 -1
  99. package/lib/chain/blocks/utils/checkpoint.js.map +1 -1
  100. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  101. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  102. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  103. package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
  104. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  105. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
  106. package/lib/chain/blocks/writeBlockInputToDb.d.ts +12 -3
  107. package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +1 -1
  108. package/lib/chain/blocks/writeBlockInputToDb.js +92 -98
  109. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  110. package/lib/chain/bls/maybeBatch.js.map +1 -1
  111. package/lib/chain/bls/multithread/index.d.ts.map +1 -1
  112. package/lib/chain/bls/multithread/index.js.map +1 -1
  113. package/lib/chain/bls/multithread/jobItem.js +2 -1
  114. package/lib/chain/bls/multithread/jobItem.js.map +1 -1
  115. package/lib/chain/bls/multithread/types.js +2 -1
  116. package/lib/chain/bls/multithread/types.js.map +1 -1
  117. package/lib/chain/bls/multithread/utils.js.map +1 -1
  118. package/lib/chain/bls/multithread/worker.js.map +1 -1
  119. package/lib/chain/bls/singleThread.d.ts.map +1 -1
  120. package/lib/chain/bls/singleThread.js.map +1 -1
  121. package/lib/chain/bls/utils.js.map +1 -1
  122. package/lib/chain/chain.d.ts +4 -4
  123. package/lib/chain/chain.d.ts.map +1 -1
  124. package/lib/chain/chain.js +7 -6
  125. package/lib/chain/chain.js.map +1 -1
  126. package/lib/chain/emitter.d.ts +4 -6
  127. package/lib/chain/emitter.d.ts.map +1 -1
  128. package/lib/chain/emitter.js +2 -1
  129. package/lib/chain/emitter.js.map +1 -1
  130. package/lib/chain/errors/attestationError.d.ts.map +1 -1
  131. package/lib/chain/errors/attestationError.js +2 -1
  132. package/lib/chain/errors/attestationError.js.map +1 -1
  133. package/lib/chain/errors/attesterSlashingError.js +2 -1
  134. package/lib/chain/errors/attesterSlashingError.js.map +1 -1
  135. package/lib/chain/errors/blobSidecarError.js +2 -1
  136. package/lib/chain/errors/blobSidecarError.js.map +1 -1
  137. package/lib/chain/errors/blockError.d.ts.map +1 -1
  138. package/lib/chain/errors/blockError.js +2 -1
  139. package/lib/chain/errors/blockError.js.map +1 -1
  140. package/lib/chain/errors/blsToExecutionChangeError.js +2 -1
  141. package/lib/chain/errors/blsToExecutionChangeError.js.map +1 -1
  142. package/lib/chain/errors/dataColumnSidecarError.js +2 -1
  143. package/lib/chain/errors/dataColumnSidecarError.js.map +1 -1
  144. package/lib/chain/errors/executionPayloadBid.d.ts +1 -1
  145. package/lib/chain/errors/executionPayloadBid.js +2 -1
  146. package/lib/chain/errors/executionPayloadBid.js.map +1 -1
  147. package/lib/chain/errors/executionPayloadEnvelope.js +2 -1
  148. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
  149. package/lib/chain/errors/gossipValidation.d.ts.map +1 -1
  150. package/lib/chain/errors/gossipValidation.js +4 -2
  151. package/lib/chain/errors/gossipValidation.js.map +1 -1
  152. package/lib/chain/errors/lightClientError.js +4 -2
  153. package/lib/chain/errors/lightClientError.js.map +1 -1
  154. package/lib/chain/errors/payloadAttestation.d.ts +1 -1
  155. package/lib/chain/errors/payloadAttestation.js +2 -1
  156. package/lib/chain/errors/payloadAttestation.js.map +1 -1
  157. package/lib/chain/errors/proposerSlashingError.js +2 -1
  158. package/lib/chain/errors/proposerSlashingError.js.map +1 -1
  159. package/lib/chain/errors/syncCommitteeError.js +2 -1
  160. package/lib/chain/errors/syncCommitteeError.js.map +1 -1
  161. package/lib/chain/errors/voluntaryExitError.js +2 -1
  162. package/lib/chain/errors/voluntaryExitError.js.map +1 -1
  163. package/lib/chain/forkChoice/index.js +2 -1
  164. package/lib/chain/forkChoice/index.js.map +1 -1
  165. package/lib/chain/initState.d.ts +1 -1
  166. package/lib/chain/initState.d.ts.map +1 -1
  167. package/lib/chain/initState.js.map +1 -1
  168. package/lib/chain/interface.js +2 -1
  169. package/lib/chain/interface.js.map +1 -1
  170. package/lib/chain/lightClient/index.d.ts +0 -29
  171. package/lib/chain/lightClient/index.d.ts.map +1 -1
  172. package/lib/chain/lightClient/index.js.map +1 -1
  173. package/lib/chain/lightClient/proofs.js.map +1 -1
  174. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  175. package/lib/chain/opPools/aggregatedAttestationPool.js +4 -2
  176. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  177. package/lib/chain/opPools/attestationPool.d.ts.map +1 -1
  178. package/lib/chain/opPools/attestationPool.js.map +1 -1
  179. package/lib/chain/opPools/executionPayloadBidPool.d.ts.map +1 -1
  180. package/lib/chain/opPools/executionPayloadBidPool.js.map +1 -1
  181. package/lib/chain/opPools/opPool.d.ts.map +1 -1
  182. package/lib/chain/opPools/opPool.js.map +1 -1
  183. package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
  184. package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
  185. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts.map +1 -1
  186. package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
  187. package/lib/chain/opPools/syncContributionAndProofPool.d.ts.map +1 -1
  188. package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
  189. package/lib/chain/opPools/types.js +4 -2
  190. package/lib/chain/opPools/types.js.map +1 -1
  191. package/lib/chain/opPools/utils.js.map +1 -1
  192. package/lib/chain/prepareNextSlot.d.ts +1 -2
  193. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  194. package/lib/chain/prepareNextSlot.js.map +1 -1
  195. package/lib/chain/produceBlock/computeNewStateRoot.d.ts +0 -1
  196. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
  197. package/lib/chain/produceBlock/computeNewStateRoot.js +4 -3
  198. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  199. package/lib/chain/produceBlock/produceBlockBody.d.ts +1 -1
  200. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  201. package/lib/chain/produceBlock/produceBlockBody.js +6 -3
  202. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  203. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js.map +1 -1
  204. package/lib/chain/regen/errors.d.ts.map +1 -1
  205. package/lib/chain/regen/errors.js +2 -1
  206. package/lib/chain/regen/errors.js.map +1 -1
  207. package/lib/chain/regen/interface.js +4 -2
  208. package/lib/chain/regen/interface.js.map +1 -1
  209. package/lib/chain/regen/queued.d.ts.map +1 -1
  210. package/lib/chain/regen/queued.js.map +1 -1
  211. package/lib/chain/regen/regen.d.ts.map +1 -1
  212. package/lib/chain/regen/regen.js +1 -1
  213. package/lib/chain/regen/regen.js.map +1 -1
  214. package/lib/chain/reprocess.d.ts.map +1 -1
  215. package/lib/chain/reprocess.js +2 -1
  216. package/lib/chain/reprocess.js.map +1 -1
  217. package/lib/chain/seenCache/seenAggregateAndProof.d.ts.map +1 -1
  218. package/lib/chain/seenCache/seenAggregateAndProof.js.map +1 -1
  219. package/lib/chain/seenCache/seenAttestationData.d.ts.map +1 -1
  220. package/lib/chain/seenCache/seenAttestationData.js +2 -1
  221. package/lib/chain/seenCache/seenAttestationData.js.map +1 -1
  222. package/lib/chain/seenCache/seenAttesters.d.ts.map +1 -1
  223. package/lib/chain/seenCache/seenAttesters.js.map +1 -1
  224. package/lib/chain/seenCache/seenBlockAttesters.d.ts.map +1 -1
  225. package/lib/chain/seenCache/seenBlockAttesters.js.map +1 -1
  226. package/lib/chain/seenCache/seenBlockProposers.d.ts.map +1 -1
  227. package/lib/chain/seenCache/seenBlockProposers.js.map +1 -1
  228. package/lib/chain/seenCache/seenCommittee.d.ts.map +1 -1
  229. package/lib/chain/seenCache/seenCommittee.js.map +1 -1
  230. package/lib/chain/seenCache/seenCommitteeContribution.d.ts.map +1 -1
  231. package/lib/chain/seenCache/seenCommitteeContribution.js.map +1 -1
  232. package/lib/chain/seenCache/seenExecutionPayloadBids.d.ts.map +1 -1
  233. package/lib/chain/seenCache/seenExecutionPayloadBids.js.map +1 -1
  234. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.d.ts.map +1 -1
  235. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.js.map +1 -1
  236. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +7 -3
  237. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
  238. package/lib/chain/seenCache/seenGossipBlockInput.js +21 -8
  239. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  240. package/lib/chain/serializeState.js +1 -0
  241. package/lib/chain/serializeState.js.map +1 -1
  242. package/lib/chain/shufflingCache.d.ts.map +1 -1
  243. package/lib/chain/shufflingCache.js +2 -1
  244. package/lib/chain/shufflingCache.js.map +1 -1
  245. package/lib/chain/stateCache/datastore/db.d.ts.map +1 -1
  246. package/lib/chain/stateCache/datastore/db.js.map +1 -1
  247. package/lib/chain/stateCache/datastore/file.d.ts.map +1 -1
  248. package/lib/chain/stateCache/datastore/file.js.map +1 -1
  249. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -1
  250. package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
  251. package/lib/chain/stateCache/mapMetrics.d.ts.map +1 -1
  252. package/lib/chain/stateCache/mapMetrics.js.map +1 -1
  253. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +1 -41
  254. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  255. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  256. package/lib/chain/stateCache/types.js +2 -1
  257. package/lib/chain/stateCache/types.js.map +1 -1
  258. package/lib/chain/validation/aggregateAndProof.js.map +1 -1
  259. package/lib/chain/validation/attestation.js.map +1 -1
  260. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  261. package/lib/chain/validation/blobSidecar.js.map +1 -1
  262. package/lib/chain/validation/block.js.map +1 -1
  263. package/lib/chain/validation/blsToExecutionChange.js.map +1 -1
  264. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  265. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  266. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  267. package/lib/chain/validation/lightClientFinalityUpdate.js.map +1 -1
  268. package/lib/chain/validation/lightClientOptimisticUpdate.js.map +1 -1
  269. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
  270. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  271. package/lib/chain/validation/signatureSets/aggregateAndProof.js.map +1 -1
  272. package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
  273. package/lib/chain/validation/signatureSets/selectionProof.js.map +1 -1
  274. package/lib/chain/validation/signatureSets/syncCommittee.js.map +1 -1
  275. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js.map +1 -1
  276. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js.map +1 -1
  277. package/lib/chain/validation/syncCommittee.js.map +1 -1
  278. package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
  279. package/lib/chain/validation/voluntaryExit.js.map +1 -1
  280. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  281. package/lib/chain/validatorMonitor.js +2 -1
  282. package/lib/chain/validatorMonitor.js.map +1 -1
  283. package/lib/constants/network.js +4 -2
  284. package/lib/constants/network.js.map +1 -1
  285. package/lib/db/beacon.d.ts.map +1 -1
  286. package/lib/db/beacon.js.map +1 -1
  287. package/lib/db/buckets.d.ts +23 -23
  288. package/lib/db/buckets.d.ts.map +1 -1
  289. package/lib/db/buckets.js +2 -1
  290. package/lib/db/buckets.js.map +1 -1
  291. package/lib/db/index.d.ts +1 -0
  292. package/lib/db/index.d.ts.map +1 -1
  293. package/lib/db/index.js +1 -0
  294. package/lib/db/index.js.map +1 -1
  295. package/lib/db/repositories/attesterSlashing.d.ts.map +1 -1
  296. package/lib/db/repositories/attesterSlashing.js.map +1 -1
  297. package/lib/db/repositories/backfilledRanges.d.ts.map +1 -1
  298. package/lib/db/repositories/backfilledRanges.js.map +1 -1
  299. package/lib/db/repositories/blobSidecars.d.ts.map +1 -1
  300. package/lib/db/repositories/blobSidecars.js.map +1 -1
  301. package/lib/db/repositories/blobSidecarsArchive.d.ts.map +1 -1
  302. package/lib/db/repositories/blobSidecarsArchive.js.map +1 -1
  303. package/lib/db/repositories/block.d.ts.map +1 -1
  304. package/lib/db/repositories/block.js.map +1 -1
  305. package/lib/db/repositories/blockArchive.d.ts.map +1 -1
  306. package/lib/db/repositories/blockArchive.js.map +1 -1
  307. package/lib/db/repositories/blockArchiveIndex.d.ts +2 -2
  308. package/lib/db/repositories/blockArchiveIndex.js.map +1 -1
  309. package/lib/db/repositories/blsToExecutionChange.d.ts.map +1 -1
  310. package/lib/db/repositories/blsToExecutionChange.js.map +1 -1
  311. package/lib/db/repositories/checkpointState.d.ts.map +1 -1
  312. package/lib/db/repositories/checkpointState.js.map +1 -1
  313. package/lib/db/repositories/dataColumnSidecar.d.ts.map +1 -1
  314. package/lib/db/repositories/dataColumnSidecar.js.map +1 -1
  315. package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +1 -1
  316. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
  317. package/lib/db/repositories/executionPayloadEnvelope.d.ts.map +1 -1
  318. package/lib/db/repositories/executionPayloadEnvelope.js.map +1 -1
  319. package/lib/db/repositories/executionPayloadEnvelopeArchive.d.ts.map +1 -1
  320. package/lib/db/repositories/executionPayloadEnvelopeArchive.js.map +1 -1
  321. package/lib/db/repositories/lightclientBestUpdate.d.ts.map +1 -1
  322. package/lib/db/repositories/lightclientBestUpdate.js.map +1 -1
  323. package/lib/db/repositories/lightclientCheckpointHeader.d.ts.map +1 -1
  324. package/lib/db/repositories/lightclientCheckpointHeader.js.map +1 -1
  325. package/lib/db/repositories/lightclientSyncCommittee.d.ts.map +1 -1
  326. package/lib/db/repositories/lightclientSyncCommittee.js.map +1 -1
  327. package/lib/db/repositories/lightclientSyncCommitteeWitness.d.ts.map +1 -1
  328. package/lib/db/repositories/lightclientSyncCommitteeWitness.js.map +1 -1
  329. package/lib/db/repositories/proposerSlashing.d.ts.map +1 -1
  330. package/lib/db/repositories/proposerSlashing.js.map +1 -1
  331. package/lib/db/repositories/stateArchive.d.ts.map +1 -1
  332. package/lib/db/repositories/stateArchive.js.map +1 -1
  333. package/lib/db/repositories/stateArchiveIndex.js.map +1 -1
  334. package/lib/db/repositories/voluntaryExit.d.ts.map +1 -1
  335. package/lib/db/repositories/voluntaryExit.js.map +1 -1
  336. package/lib/execution/builder/cache.d.ts.map +1 -1
  337. package/lib/execution/builder/cache.js.map +1 -1
  338. package/lib/execution/builder/http.d.ts.map +1 -1
  339. package/lib/execution/builder/http.js +2 -1
  340. package/lib/execution/builder/http.js.map +1 -1
  341. package/lib/execution/builder/index.js.map +1 -1
  342. package/lib/execution/builder/utils.js.map +1 -1
  343. package/lib/execution/engine/disabled.d.ts.map +1 -1
  344. package/lib/execution/engine/disabled.js.map +1 -1
  345. package/lib/execution/engine/http.d.ts.map +1 -1
  346. package/lib/execution/engine/http.js.map +1 -1
  347. package/lib/execution/engine/index.js.map +1 -1
  348. package/lib/execution/engine/interface.js +4 -2
  349. package/lib/execution/engine/interface.js.map +1 -1
  350. package/lib/execution/engine/jsonRpcHttpClient.d.ts +10 -15
  351. package/lib/execution/engine/jsonRpcHttpClient.d.ts.map +1 -1
  352. package/lib/execution/engine/jsonRpcHttpClient.js +2 -1
  353. package/lib/execution/engine/jsonRpcHttpClient.js.map +1 -1
  354. package/lib/execution/engine/jwt.js.map +1 -1
  355. package/lib/execution/engine/mock.d.ts.map +1 -1
  356. package/lib/execution/engine/mock.js.map +1 -1
  357. package/lib/execution/engine/payloadIdCache.d.ts.map +1 -1
  358. package/lib/execution/engine/payloadIdCache.js.map +1 -1
  359. package/lib/execution/engine/types.js.map +1 -1
  360. package/lib/execution/engine/utils.d.ts +1 -1
  361. package/lib/execution/engine/utils.d.ts.map +1 -1
  362. package/lib/execution/engine/utils.js.map +1 -1
  363. package/lib/metrics/metrics/beacon.d.ts.map +1 -1
  364. package/lib/metrics/metrics/beacon.js.map +1 -1
  365. package/lib/metrics/metrics/lodestar.d.ts +2 -1
  366. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  367. package/lib/metrics/metrics/lodestar.js +4 -0
  368. package/lib/metrics/metrics/lodestar.js.map +1 -1
  369. package/lib/metrics/metrics.js.map +1 -1
  370. package/lib/metrics/nodeJsMetrics.js.map +1 -1
  371. package/lib/metrics/server/http.d.ts +1 -1
  372. package/lib/metrics/server/http.d.ts.map +1 -1
  373. package/lib/metrics/server/http.js.map +1 -1
  374. package/lib/metrics/utils/avgMinMax.d.ts.map +1 -1
  375. package/lib/metrics/utils/avgMinMax.js.map +1 -1
  376. package/lib/metrics/utils/gauge.d.ts.map +1 -1
  377. package/lib/metrics/utils/gauge.js.map +1 -1
  378. package/lib/metrics/utils/registryMetricCreator.d.ts.map +1 -1
  379. package/lib/metrics/utils/registryMetricCreator.js.map +1 -1
  380. package/lib/monitoring/clientStats.js.map +1 -1
  381. package/lib/monitoring/properties.d.ts.map +1 -1
  382. package/lib/monitoring/properties.js.map +1 -1
  383. package/lib/monitoring/service.d.ts.map +1 -1
  384. package/lib/monitoring/service.js.map +1 -1
  385. package/lib/monitoring/system.d.ts.map +1 -1
  386. package/lib/monitoring/system.js.map +1 -1
  387. package/lib/monitoring/types.js +4 -2
  388. package/lib/monitoring/types.js.map +1 -1
  389. package/lib/network/core/events.d.ts +1 -3
  390. package/lib/network/core/events.d.ts.map +1 -1
  391. package/lib/network/core/events.js +4 -2
  392. package/lib/network/core/events.js.map +1 -1
  393. package/lib/network/core/metrics.d.ts +6 -7
  394. package/lib/network/core/metrics.d.ts.map +1 -1
  395. package/lib/network/core/metrics.js.map +1 -1
  396. package/lib/network/core/networkCore.d.ts +1 -1
  397. package/lib/network/core/networkCore.d.ts.map +1 -1
  398. package/lib/network/core/networkCore.js.map +1 -1
  399. package/lib/network/core/networkCoreWorker.js.map +1 -1
  400. package/lib/network/core/networkCoreWorkerHandler.d.ts.map +1 -1
  401. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  402. package/lib/network/discv5/index.d.ts +1 -3
  403. package/lib/network/discv5/index.d.ts.map +1 -1
  404. package/lib/network/discv5/index.js.map +1 -1
  405. package/lib/network/discv5/utils.js +2 -1
  406. package/lib/network/discv5/utils.js.map +1 -1
  407. package/lib/network/discv5/worker.js.map +1 -1
  408. package/lib/network/events.d.ts +1 -3
  409. package/lib/network/events.d.ts.map +1 -1
  410. package/lib/network/events.js +4 -2
  411. package/lib/network/events.js.map +1 -1
  412. package/lib/network/forks.js.map +1 -1
  413. package/lib/network/gossip/encoding.d.ts.map +1 -1
  414. package/lib/network/gossip/encoding.js.map +1 -1
  415. package/lib/network/gossip/errors.d.ts.map +1 -1
  416. package/lib/network/gossip/errors.js.map +1 -1
  417. package/lib/network/gossip/gossipsub.d.ts.map +1 -1
  418. package/lib/network/gossip/gossipsub.js.map +1 -1
  419. package/lib/network/gossip/interface.js +4 -2
  420. package/lib/network/gossip/interface.js.map +1 -1
  421. package/lib/network/gossip/metrics.d.ts +12 -14
  422. package/lib/network/gossip/metrics.d.ts.map +1 -1
  423. package/lib/network/gossip/metrics.js.map +1 -1
  424. package/lib/network/gossip/scoringParameters.d.ts +1 -1
  425. package/lib/network/gossip/scoringParameters.d.ts.map +1 -1
  426. package/lib/network/gossip/scoringParameters.js.map +1 -1
  427. package/lib/network/gossip/topic.d.ts +2867 -2920
  428. package/lib/network/gossip/topic.d.ts.map +1 -1
  429. package/lib/network/gossip/topic.js.map +1 -1
  430. package/lib/network/libp2p/error.js +2 -1
  431. package/lib/network/libp2p/error.js.map +1 -1
  432. package/lib/network/libp2p/index.js.map +1 -1
  433. package/lib/network/metadata.d.ts.map +1 -1
  434. package/lib/network/metadata.js +4 -2
  435. package/lib/network/metadata.js.map +1 -1
  436. package/lib/network/network.d.ts +1 -1
  437. package/lib/network/network.d.ts.map +1 -1
  438. package/lib/network/network.js +1 -1
  439. package/lib/network/network.js.map +1 -1
  440. package/lib/network/peers/client.js +2 -1
  441. package/lib/network/peers/client.js.map +1 -1
  442. package/lib/network/peers/datastore.d.ts +0 -3
  443. package/lib/network/peers/datastore.d.ts.map +1 -1
  444. package/lib/network/peers/datastore.js.map +1 -1
  445. package/lib/network/peers/discover.d.ts +0 -7
  446. package/lib/network/peers/discover.d.ts.map +1 -1
  447. package/lib/network/peers/discover.js +4 -2
  448. package/lib/network/peers/discover.js.map +1 -1
  449. package/lib/network/peers/peerManager.d.ts +0 -1
  450. package/lib/network/peers/peerManager.d.ts.map +1 -1
  451. package/lib/network/peers/peerManager.js.map +1 -1
  452. package/lib/network/peers/peersData.d.ts.map +1 -1
  453. package/lib/network/peers/peersData.js +2 -1
  454. package/lib/network/peers/peersData.js.map +1 -1
  455. package/lib/network/peers/score/interface.js +4 -2
  456. package/lib/network/peers/score/interface.js.map +1 -1
  457. package/lib/network/peers/score/score.d.ts.map +1 -1
  458. package/lib/network/peers/score/score.js.map +1 -1
  459. package/lib/network/peers/score/store.d.ts.map +1 -1
  460. package/lib/network/peers/score/store.js.map +1 -1
  461. package/lib/network/peers/score/utils.js.map +1 -1
  462. package/lib/network/peers/utils/assertPeerRelevance.js +2 -1
  463. package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
  464. package/lib/network/peers/utils/enrSubnetsDeserialize.js.map +1 -1
  465. package/lib/network/peers/utils/getConnectedPeerIds.js.map +1 -1
  466. package/lib/network/peers/utils/prioritizePeers.js +2 -1
  467. package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
  468. package/lib/network/peers/utils/subnetMap.d.ts.map +1 -1
  469. package/lib/network/peers/utils/subnetMap.js.map +1 -1
  470. package/lib/network/processor/aggregatorTracker.d.ts.map +1 -1
  471. package/lib/network/processor/aggregatorTracker.js.map +1 -1
  472. package/lib/network/processor/extractSlotRootFns.js.map +1 -1
  473. package/lib/network/processor/gossipHandlers.js.map +1 -1
  474. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  475. package/lib/network/processor/gossipQueues/indexed.d.ts.map +1 -1
  476. package/lib/network/processor/gossipQueues/indexed.js.map +1 -1
  477. package/lib/network/processor/gossipQueues/linear.d.ts.map +1 -1
  478. package/lib/network/processor/gossipQueues/linear.js.map +1 -1
  479. package/lib/network/processor/gossipQueues/types.js +4 -2
  480. package/lib/network/processor/gossipQueues/types.js.map +1 -1
  481. package/lib/network/processor/gossipValidatorFn.js.map +1 -1
  482. package/lib/network/processor/index.d.ts.map +1 -1
  483. package/lib/network/processor/index.js +4 -2
  484. package/lib/network/processor/index.js.map +1 -1
  485. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -1
  486. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  487. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
  488. package/lib/network/reqresp/handlers/beaconBlocksByRange.js +3 -2
  489. package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
  490. package/lib/network/reqresp/handlers/beaconBlocksByRoot.js.map +1 -1
  491. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +1 -1
  492. package/lib/network/reqresp/handlers/blobSidecarsByRange.js +3 -2
  493. package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +1 -1
  494. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js.map +1 -1
  495. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -1
  496. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +3 -2
  497. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -1
  498. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -1
  499. package/lib/network/reqresp/handlers/index.js.map +1 -1
  500. package/lib/network/reqresp/handlers/lightClientBootstrap.js.map +1 -1
  501. package/lib/network/reqresp/handlers/lightClientFinalityUpdate.js.map +1 -1
  502. package/lib/network/reqresp/handlers/lightClientOptimisticUpdate.js.map +1 -1
  503. package/lib/network/reqresp/handlers/lightClientUpdatesByRange.js.map +1 -1
  504. package/lib/network/reqresp/interface.js +2 -1
  505. package/lib/network/reqresp/interface.js.map +1 -1
  506. package/lib/network/reqresp/protocols.d.ts.map +1 -1
  507. package/lib/network/reqresp/protocols.js.map +1 -1
  508. package/lib/network/reqresp/rateLimit.js.map +1 -1
  509. package/lib/network/reqresp/score.js.map +1 -1
  510. package/lib/network/reqresp/types.js +4 -2
  511. package/lib/network/reqresp/types.js.map +1 -1
  512. package/lib/network/reqresp/utils/collect.d.ts +1 -1
  513. package/lib/network/reqresp/utils/collect.js.map +1 -1
  514. package/lib/network/reqresp/utils/collectSequentialBlocksInRange.d.ts +1 -1
  515. package/lib/network/reqresp/utils/collectSequentialBlocksInRange.js +2 -1
  516. package/lib/network/reqresp/utils/collectSequentialBlocksInRange.js.map +1 -1
  517. package/lib/network/reqresp/utils/dataColumnResponseValidation.d.ts +1 -1
  518. package/lib/network/reqresp/utils/dataColumnResponseValidation.d.ts.map +1 -1
  519. package/lib/network/reqresp/utils/dataColumnResponseValidation.js.map +1 -1
  520. package/lib/network/statusCache.d.ts.map +1 -1
  521. package/lib/network/statusCache.js.map +1 -1
  522. package/lib/network/subnets/attnetsService.d.ts.map +1 -1
  523. package/lib/network/subnets/attnetsService.js +2 -1
  524. package/lib/network/subnets/attnetsService.js.map +1 -1
  525. package/lib/network/subnets/interface.js.map +1 -1
  526. package/lib/network/subnets/syncnetsService.d.ts.map +1 -1
  527. package/lib/network/subnets/syncnetsService.js.map +1 -1
  528. package/lib/network/subnets/util.js.map +1 -1
  529. package/lib/network/util.js.map +1 -1
  530. package/lib/node/nodejs.d.ts +2 -2
  531. package/lib/node/nodejs.d.ts.map +1 -1
  532. package/lib/node/nodejs.js +2 -1
  533. package/lib/node/nodejs.js.map +1 -1
  534. package/lib/node/notifier.js.map +1 -1
  535. package/lib/node/utils/interop/deposits.js.map +1 -1
  536. package/lib/node/utils/interop/state.d.ts +1 -1
  537. package/lib/node/utils/interop/state.d.ts.map +1 -1
  538. package/lib/node/utils/interop/state.js.map +1 -1
  539. package/lib/node/utils/lightclient.js.map +1 -1
  540. package/lib/node/utils/state.js.map +1 -1
  541. package/lib/sync/backfill/backfill.d.ts +1 -10
  542. package/lib/sync/backfill/backfill.d.ts.map +1 -1
  543. package/lib/sync/backfill/backfill.js +6 -3
  544. package/lib/sync/backfill/backfill.js.map +1 -1
  545. package/lib/sync/backfill/errors.js +2 -1
  546. package/lib/sync/backfill/errors.js.map +1 -1
  547. package/lib/sync/backfill/verify.js.map +1 -1
  548. package/lib/sync/interface.js +2 -1
  549. package/lib/sync/interface.js.map +1 -1
  550. package/lib/sync/range/batch.d.ts.map +1 -1
  551. package/lib/sync/range/batch.js +4 -2
  552. package/lib/sync/range/batch.js.map +1 -1
  553. package/lib/sync/range/chain.d.ts +0 -10
  554. package/lib/sync/range/chain.d.ts.map +1 -1
  555. package/lib/sync/range/chain.js +2 -1
  556. package/lib/sync/range/chain.js.map +1 -1
  557. package/lib/sync/range/range.d.ts +1 -3
  558. package/lib/sync/range/range.d.ts.map +1 -1
  559. package/lib/sync/range/range.js +4 -2
  560. package/lib/sync/range/range.js.map +1 -1
  561. package/lib/sync/range/utils/batches.js.map +1 -1
  562. package/lib/sync/range/utils/chainTarget.js.map +1 -1
  563. package/lib/sync/range/utils/hashBlocks.js.map +1 -1
  564. package/lib/sync/range/utils/peerBalancer.d.ts.map +1 -1
  565. package/lib/sync/range/utils/peerBalancer.js.map +1 -1
  566. package/lib/sync/range/utils/updateChains.js.map +1 -1
  567. package/lib/sync/sync.d.ts.map +1 -1
  568. package/lib/sync/sync.js.map +1 -1
  569. package/lib/sync/types.js +4 -2
  570. package/lib/sync/types.js.map +1 -1
  571. package/lib/sync/unknownBlock.d.ts +0 -14
  572. package/lib/sync/unknownBlock.d.ts.map +1 -1
  573. package/lib/sync/unknownBlock.js.map +1 -1
  574. package/lib/sync/utils/downloadByRange.d.ts +4 -4
  575. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  576. package/lib/sync/utils/downloadByRange.js +2 -1
  577. package/lib/sync/utils/downloadByRange.js.map +1 -1
  578. package/lib/sync/utils/downloadByRoot.d.ts +8 -8
  579. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  580. package/lib/sync/utils/downloadByRoot.js +2 -1
  581. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  582. package/lib/sync/utils/pendingBlocksTree.js.map +1 -1
  583. package/lib/sync/utils/remoteSyncType.d.ts +1 -1
  584. package/lib/sync/utils/remoteSyncType.d.ts.map +1 -1
  585. package/lib/sync/utils/remoteSyncType.js +4 -2
  586. package/lib/sync/utils/remoteSyncType.js.map +1 -1
  587. package/lib/util/address.js.map +1 -1
  588. package/lib/util/array.d.ts.map +1 -1
  589. package/lib/util/array.js.map +1 -1
  590. package/lib/util/asyncIterableToEvents.d.ts.map +1 -1
  591. package/lib/util/asyncIterableToEvents.js +2 -1
  592. package/lib/util/asyncIterableToEvents.js.map +1 -1
  593. package/lib/util/binarySearch.d.ts.map +1 -1
  594. package/lib/util/binarySearch.js.map +1 -1
  595. package/lib/util/bitArray.js +2 -1
  596. package/lib/util/bitArray.js.map +1 -1
  597. package/lib/util/blobs.js.map +1 -1
  598. package/lib/util/bufferPool.d.ts.map +1 -1
  599. package/lib/util/bufferPool.js +2 -1
  600. package/lib/util/bufferPool.js.map +1 -1
  601. package/lib/util/chunkify.js.map +1 -1
  602. package/lib/util/clock.d.ts.map +1 -1
  603. package/lib/util/clock.js +2 -1
  604. package/lib/util/clock.js.map +1 -1
  605. package/lib/util/dataColumns.d.ts.map +1 -1
  606. package/lib/util/dataColumns.js +4 -2
  607. package/lib/util/dataColumns.js.map +1 -1
  608. package/lib/util/dependentRoot.js.map +1 -1
  609. package/lib/util/enum.js.map +1 -1
  610. package/lib/util/error.js.map +1 -1
  611. package/lib/util/eventLoop.js.map +1 -1
  612. package/lib/util/execution.js +2 -1
  613. package/lib/util/execution.js.map +1 -1
  614. package/lib/util/file.js.map +1 -1
  615. package/lib/util/forkChoice.js.map +1 -1
  616. package/lib/util/forkName.js.map +1 -1
  617. package/lib/util/graffiti.js.map +1 -1
  618. package/lib/util/hex.js.map +1 -1
  619. package/lib/util/ip.js.map +1 -1
  620. package/lib/util/itTrigger.d.ts.map +1 -1
  621. package/lib/util/itTrigger.js.map +1 -1
  622. package/lib/util/map.d.ts.map +1 -1
  623. package/lib/util/map.js.map +1 -1
  624. package/lib/util/metadata.js.map +1 -1
  625. package/lib/util/multifork.js.map +1 -1
  626. package/lib/util/numpy.js.map +1 -1
  627. package/lib/util/peerId.js.map +1 -1
  628. package/lib/util/profile.js +2 -1
  629. package/lib/util/profile.js.map +1 -1
  630. package/lib/util/promises.js.map +1 -1
  631. package/lib/util/queue/errors.js +2 -1
  632. package/lib/util/queue/errors.js.map +1 -1
  633. package/lib/util/queue/fnQueue.d.ts.map +1 -1
  634. package/lib/util/queue/fnQueue.js.map +1 -1
  635. package/lib/util/queue/itemQueue.d.ts.map +1 -1
  636. package/lib/util/queue/itemQueue.js.map +1 -1
  637. package/lib/util/queue/options.js +2 -1
  638. package/lib/util/queue/options.js.map +1 -1
  639. package/lib/util/serializedCache.d.ts +4 -4
  640. package/lib/util/serializedCache.d.ts.map +1 -1
  641. package/lib/util/serializedCache.js +6 -4
  642. package/lib/util/serializedCache.js.map +1 -1
  643. package/lib/util/set.d.ts.map +1 -1
  644. package/lib/util/set.js.map +1 -1
  645. package/lib/util/shuffle.js.map +1 -1
  646. package/lib/util/sortBy.js.map +1 -1
  647. package/lib/util/sszBytes.js.map +1 -1
  648. package/lib/util/time.js.map +1 -1
  649. package/lib/util/timeSeries.d.ts.map +1 -1
  650. package/lib/util/timeSeries.js.map +1 -1
  651. package/lib/util/types.d.ts.map +1 -1
  652. package/lib/util/workerEvents.d.ts +1 -1
  653. package/lib/util/workerEvents.d.ts.map +1 -1
  654. package/lib/util/workerEvents.js.map +1 -1
  655. package/lib/util/wrapError.js.map +1 -1
  656. package/package.json +17 -17
  657. package/src/chain/archiveStore/archiveStore.ts +5 -5
  658. package/src/chain/archiveStore/utils/archiveBlocks.ts +4 -5
  659. package/src/chain/blocks/blockInput/blockInput.ts +35 -0
  660. package/src/chain/blocks/blockInput/types.ts +17 -0
  661. package/src/chain/blocks/importBlock.ts +1 -1
  662. package/src/chain/blocks/writeBlockInputToDb.ts +105 -104
  663. package/src/chain/chain.ts +25 -13
  664. package/src/chain/emitter.ts +3 -3
  665. package/src/chain/errors/executionPayloadBid.ts +1 -1
  666. package/src/chain/errors/payloadAttestation.ts +1 -1
  667. package/src/chain/produceBlock/computeNewStateRoot.ts +4 -3
  668. package/src/chain/regen/regen.ts +1 -1
  669. package/src/chain/seenCache/seenGossipBlockInput.ts +38 -10
  670. package/src/db/index.ts +1 -0
  671. package/src/metrics/metrics/lodestar.ts +4 -0
  672. package/src/network/network.ts +2 -1
  673. package/src/network/processor/gossipHandlers.ts +1 -1
  674. package/src/network/processor/gossipValidatorFn.ts +1 -1
  675. package/src/network/reqresp/ReqRespBeaconNode.ts +1 -1
  676. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +4 -3
  677. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +3 -2
  678. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +4 -3
  679. package/src/network/reqresp/handlers/dataColumnSidecarsByRoot.ts +1 -1
  680. package/src/network/reqresp/utils/collect.ts +1 -1
  681. package/src/network/reqresp/utils/collectSequentialBlocksInRange.ts +1 -1
  682. package/src/sync/utils/downloadByRoot.ts +1 -1
  683. package/src/sync/utils/remoteSyncType.ts +1 -1
  684. package/src/util/serializedCache.ts +7 -5
@@ -95,7 +95,7 @@ export async function importBlock(
95
95
  // Without this, a supernode syncing from behind can accumulate many blocks worth of column
96
96
  // data in memory (up to 128 columns per block) causing OOM before persistence catches up.
97
97
  await this.unfinalizedBlockWrites.waitForSpace();
98
- this.unfinalizedBlockWrites.push([blockInput]).catch((e) => {
98
+ this.unfinalizedBlockWrites.push(blockInput).catch((e) => {
99
99
  if (!isQueueErrorAborted(e)) {
100
100
  this.logger.error("Error pushing block to unfinalized write queue", {slot: blockSlot}, e as Error);
101
101
  }
@@ -1,7 +1,9 @@
1
- import {fulu} from "@lodestar/types";
2
- import {prettyPrintIndices, toRootHex} from "@lodestar/utils";
1
+ import {ForkPostDeneb, isForkPostDeneb} from "@lodestar/params";
2
+ import {SignedBeaconBlock} from "@lodestar/types";
3
+ import {fromHex, toRootHex} from "@lodestar/utils";
4
+ import {getBlobKzgCommitments} from "../../util/dataColumns.js";
3
5
  import {BeaconChain} from "../chain.js";
4
- import {IBlockInput, isBlockInputBlobs, isBlockInputColumns} from "./blockInput/index.js";
6
+ import {IBlockInput, IDataColumnsInput, isBlockInputBlobs, isBlockInputColumns} from "./blockInput/index.js";
5
7
  import {BLOB_AVAILABILITY_TIMEOUT} from "./verifyBlocksDataAvailability.js";
6
8
 
7
9
  /**
@@ -10,129 +12,128 @@ import {BLOB_AVAILABILITY_TIMEOUT} from "./verifyBlocksDataAvailability.js";
10
12
  *
11
13
  * This operation may be performed before, during or after importing to the fork-choice. As long as errors
12
14
  * are handled properly for eventual consistency.
15
+ *
16
+ * Block+blobs (pre-fulu) and data columns (fulu+) are written in parallel.
13
17
  */
14
- export async function writeBlockInputToDb(this: BeaconChain, blocksInputs: IBlockInput[]): Promise<void> {
15
- const fnPromises: Promise<void>[] = [];
16
- // track slots for logging
17
- const slots: number[] = [];
18
-
19
- for (const blockInput of blocksInputs) {
20
- const block = blockInput.getBlock();
21
- const slot = block.message.slot;
22
- slots.push(slot);
23
- const blockRoot = this.config.getForkTypes(block.message.slot).BeaconBlock.hashTreeRoot(block.message);
24
- const blockRootHex = toRootHex(blockRoot);
25
- const blockBytes = this.serializedCache.get(block);
26
- if (blockBytes) {
27
- // skip serializing data if we already have it
28
- this.metrics?.importBlock.persistBlockWithSerializedDataCount.inc();
29
- fnPromises.push(this.db.block.putBinary(this.db.block.getId(block), blockBytes));
30
- } else {
31
- this.metrics?.importBlock.persistBlockNoSerializedDataCount.inc();
32
- fnPromises.push(this.db.block.add(block));
33
- }
18
+ export async function writeBlockInputToDb(this: BeaconChain, blockInput: IBlockInput): Promise<void> {
19
+ const promises: Promise<void>[] = [writeBlockAndBlobsToDb.call(this, blockInput)];
34
20
 
35
- this.logger.debug("Persist block to hot DB", {
36
- slot: block.message.slot,
37
- root: blockRootHex,
38
- inputType: blockInput.type,
39
- });
21
+ if (isBlockInputColumns(blockInput)) {
22
+ promises.push(writeDataColumnsToDb.call(this, blockInput));
23
+ }
40
24
 
41
- if (!blockInput.hasAllData()) {
42
- await blockInput.waitForAllData(BLOB_AVAILABILITY_TIMEOUT);
43
- }
25
+ await Promise.all(promises);
26
+ this.logger.debug("Persisted blockInput to db", {slot: blockInput.slot, root: blockInput.blockRootHex});
27
+ }
44
28
 
45
- // NOTE: Old data is pruned on archive
46
- if (isBlockInputColumns(blockInput)) {
47
- if (!blockInput.hasComputedAllData()) {
48
- // Supernodes may only have a subset of the data columns by the time the block begins to be imported
49
- // because full data availability can be assumed after NUMBER_OF_COLUMNS / 2 columns are available.
50
- // Here, however, all data columns must be fully available/reconstructed before persisting to the DB.
51
- await blockInput.waitForComputedAllData(BLOB_AVAILABILITY_TIMEOUT).catch(() => {
52
- this.logger.debug("Failed to wait for computed all data", {slot, blockRoot: blockRootHex});
53
- });
54
- }
29
+ async function writeBlockAndBlobsToDb(this: BeaconChain, blockInput: IBlockInput): Promise<void> {
30
+ const block = blockInput.getBlock();
31
+ const slot = block.message.slot;
32
+ const blockRoot = this.config.getForkTypes(slot).BeaconBlock.hashTreeRoot(block.message);
33
+ const blockRootHex = toRootHex(blockRoot);
34
+ const numBlobs = isForkPostDeneb(blockInput.forkName)
35
+ ? getBlobKzgCommitments(blockInput.forkName, block as SignedBeaconBlock<ForkPostDeneb>).length
36
+ : undefined;
37
+ const fnPromises: Promise<void>[] = [];
55
38
 
56
- const {custodyColumns} = this.custodyConfig;
57
- const blobsLen = (block.message as fulu.BeaconBlock).body.blobKzgCommitments.length;
58
- let dataColumnsLen: number;
59
- if (blobsLen === 0) {
60
- dataColumnsLen = 0;
61
- } else {
62
- dataColumnsLen = custodyColumns.length;
63
- }
39
+ const blockBytes = this.serializedCache.get(block);
40
+ if (blockBytes) {
41
+ // skip serializing data if we already have it
42
+ this.metrics?.importBlock.persistBlockWithSerializedDataCount.inc();
43
+ fnPromises.push(this.db.block.putBinary(this.db.block.getId(block), blockBytes));
44
+ } else {
45
+ this.metrics?.importBlock.persistBlockNoSerializedDataCount.inc();
46
+ fnPromises.push(this.db.block.add(block));
47
+ }
64
48
 
65
- const dataColumnSidecars = blockInput.getCustodyColumns();
66
- if (dataColumnSidecars.length !== dataColumnsLen) {
67
- this.logger.debug(
68
- `Invalid dataColumnSidecars=${dataColumnSidecars.length} for custody expected custodyColumnsLen=${dataColumnsLen}`
69
- );
70
- }
49
+ this.logger.debug("Persist block to hot DB", {slot, root: blockRootHex, inputType: blockInput.type, numBlobs});
71
50
 
72
- const binaryPuts = [];
73
- const nonbinaryPuts = [];
74
- for (const dataColumnSidecar of dataColumnSidecars) {
75
- // skip reserializing column if we already have it
76
- const serialized = this.serializedCache.get(dataColumnSidecar);
77
- if (serialized) {
78
- binaryPuts.push({key: dataColumnSidecar.index, value: serialized});
79
- } else {
80
- nonbinaryPuts.push(dataColumnSidecar);
51
+ if (isBlockInputBlobs(blockInput)) {
52
+ fnPromises.push(
53
+ (async () => {
54
+ if (!blockInput.hasAllData()) {
55
+ await blockInput.waitForAllData(BLOB_AVAILABILITY_TIMEOUT);
81
56
  }
82
- }
83
- fnPromises.push(this.db.dataColumnSidecar.putManyBinary(blockRoot, binaryPuts));
84
- fnPromises.push(this.db.dataColumnSidecar.putMany(blockRoot, nonbinaryPuts));
85
- this.logger.debug("Persisted dataColumnSidecars to hot DB", {
86
- slot: block.message.slot,
87
- root: blockRootHex,
88
- dataColumnSidecars: dataColumnSidecars.length,
89
- numBlobs: blobsLen,
90
- custodyColumns: custodyColumns.length,
91
- });
92
- } else if (isBlockInputBlobs(blockInput)) {
93
- const blobSidecars = blockInput.getBlobs();
94
- fnPromises.push(this.db.blobSidecars.add({blockRoot, slot: block.message.slot, blobSidecars}));
95
- this.logger.debug("Persisted blobSidecars to hot DB", {
96
- blobsLen: blobSidecars.length,
97
- slot: block.message.slot,
98
- root: blockRootHex,
99
- });
100
- }
57
+ const blobSidecars = blockInput.getBlobs();
58
+ await this.db.blobSidecars.add({blockRoot, slot, blobSidecars});
59
+ this.logger.debug("Persisted blobSidecars to hot DB", {
60
+ slot,
61
+ root: blockRootHex,
62
+ numBlobs: blobSidecars.length,
63
+ });
64
+ })()
65
+ );
66
+ }
67
+
68
+ await Promise.all(fnPromises);
69
+ }
70
+
71
+ /**
72
+ * Persists data columns to DB for a given block. Accepts a narrow sub-interface of IBlockInput
73
+ * so it can be reused across forks (e.g. Fulu, Gloas).
74
+ *
75
+ * NOTE: Old data is pruned on archive.
76
+ */
77
+ export async function writeDataColumnsToDb(this: BeaconChain, blockInput: IDataColumnsInput): Promise<void> {
78
+ const {slot, blockRootHex} = blockInput;
79
+ const blockRoot = fromHex(blockRootHex);
101
80
 
102
- await Promise.all(fnPromises);
103
- this.logger.debug("Persisted blocksInput to db", {
104
- blocksInput: blocksInputs.length,
105
- slots: prettyPrintIndices(slots),
81
+ if (!blockInput.hasComputedAllData()) {
82
+ // Supernodes may only have a subset of the data columns by the time the block begins to be imported
83
+ // because full data availability can be assumed after NUMBER_OF_COLUMNS / 2 columns are available.
84
+ // Here, however, all data columns must be fully available/reconstructed before persisting to the DB.
85
+ await blockInput.waitForComputedAllData(BLOB_AVAILABILITY_TIMEOUT).catch(() => {
86
+ this.logger.debug("Failed to wait for computed all data", {slot, blockRoot: blockRootHex});
106
87
  });
107
88
  }
89
+
90
+ const {custodyColumns} = this.custodyConfig;
91
+ const dataColumnSidecars = blockInput.getCustodyColumns();
92
+
93
+ const binaryPuts: {key: number; value: Uint8Array}[] = [];
94
+ const nonbinaryPuts = [];
95
+ for (const dataColumnSidecar of dataColumnSidecars) {
96
+ // skip reserializing column if we already have it
97
+ const serialized = this.serializedCache.get(dataColumnSidecar);
98
+ if (serialized) {
99
+ binaryPuts.push({key: dataColumnSidecar.index, value: serialized});
100
+ } else {
101
+ nonbinaryPuts.push(dataColumnSidecar);
102
+ }
103
+ }
104
+
105
+ await Promise.all([
106
+ this.db.dataColumnSidecar.putManyBinary(blockRoot, binaryPuts),
107
+ this.db.dataColumnSidecar.putMany(blockRoot, nonbinaryPuts),
108
+ ]);
109
+
110
+ this.logger.debug("Persisted dataColumnSidecars to hot DB", {
111
+ slot,
112
+ root: blockRootHex,
113
+ dataColumnSidecars: dataColumnSidecars.length,
114
+ custodyColumns: custodyColumns.length,
115
+ numBlobs: dataColumnSidecars[0]?.column.length,
116
+ });
108
117
  }
109
118
 
110
- export async function persistBlockInputs(this: BeaconChain, blockInputs: IBlockInput[]): Promise<void> {
119
+ export async function persistBlockInput(this: BeaconChain, blockInput: IBlockInput): Promise<void> {
111
120
  await writeBlockInputToDb
112
- .call(this, blockInputs)
121
+ .call(this, blockInput)
113
122
  .catch((e) => {
114
123
  this.logger.debug(
115
124
  "Error persisting block input in hot db",
116
125
  {
117
- count: blockInputs.length,
118
- slot: blockInputs[0].slot,
119
- root: blockInputs[0].blockRootHex,
126
+ slot: blockInput.slot,
127
+ root: blockInput.blockRootHex,
120
128
  },
121
129
  e
122
130
  );
123
131
  })
124
132
  .finally(() => {
125
- for (const blockInput of blockInputs) {
126
- this.seenBlockInputCache.prune(blockInput.blockRootHex);
127
- }
128
- // Without forcefully clearing this cache, we would rely on WeakMap to evict memory which is not reliable.
129
- // Clear here (after the DB write) so that writeBlockInputToDb can still use the cached serialized bytes.
130
- this.serializedCache.clear();
131
- if (blockInputs.length === 1) {
132
- this.logger.debug("Pruned block input", {
133
- slot: blockInputs[0].slot,
134
- root: blockInputs[0].blockRootHex,
135
- });
136
- }
133
+ this.seenBlockInputCache.prune(blockInput.blockRootHex);
134
+ this.logger.debug("Pruned block input", {
135
+ slot: blockInput.slot,
136
+ root: blockInput.blockRootHex,
137
+ });
137
138
  });
138
139
  }
@@ -2,7 +2,13 @@ import path from "node:path";
2
2
  import {PrivateKey} from "@libp2p/interface";
3
3
  import {CompositeTypeAny, TreeView, Type} from "@chainsafe/ssz";
4
4
  import {BeaconConfig} from "@lodestar/config";
5
- import {CheckpointWithHex, IForkChoice, ProtoBlock, UpdateHeadOpt} from "@lodestar/fork-choice";
5
+ import {
6
+ CheckpointWithHex,
7
+ CheckpointWithPayloadStatus,
8
+ IForkChoice,
9
+ ProtoBlock,
10
+ UpdateHeadOpt,
11
+ } from "@lodestar/fork-choice";
6
12
  import {LoggerNode} from "@lodestar/logger/node";
7
13
  import {
8
14
  BUILDER_INDEX_SELF_BUILD,
@@ -58,7 +64,7 @@ import {Logger, fromHex, gweiToWei, isErrorAborted, pruneSetToMax, sleep, toRoot
58
64
  import {ProcessShutdownCallback} from "@lodestar/validator";
59
65
  import {GENESIS_EPOCH, ZERO_HASH} from "../constants/index.js";
60
66
  import {IBeaconDb} from "../db/index.js";
61
- import {BLOB_SIDECARS_IN_WRAPPER_INDEX} from "../db/repositories/blobSidecars.ts";
67
+ import {BLOB_SIDECARS_IN_WRAPPER_INDEX} from "../db/repositories/blobSidecars.js";
62
68
  import {BuilderStatus} from "../execution/builder/http.js";
63
69
  import {IExecutionBuilder, IExecutionEngine} from "../execution/index.js";
64
70
  import {Metrics} from "../metrics/index.js";
@@ -69,15 +75,15 @@ import {CustodyConfig, getValidatorsCustodyRequirement} from "../util/dataColumn
69
75
  import {callInNextEventLoop} from "../util/eventLoop.js";
70
76
  import {ensureDir, writeIfNotExist} from "../util/file.js";
71
77
  import {isOptimisticBlock} from "../util/forkChoice.js";
72
- import {JobItemQueue} from "../util/queue/itemQueue.ts";
78
+ import {JobItemQueue} from "../util/queue/itemQueue.js";
73
79
  import {SerializedCache} from "../util/serializedCache.js";
74
- import {getSlotFromSignedBeaconBlockSerialized} from "../util/sszBytes.ts";
80
+ import {getSlotFromSignedBeaconBlockSerialized} from "../util/sszBytes.js";
75
81
  import {ArchiveStore} from "./archiveStore/archiveStore.js";
76
82
  import {CheckpointBalancesCache} from "./balancesCache.js";
77
83
  import {BeaconProposerCache} from "./beaconProposerCache.js";
78
84
  import {IBlockInput, isBlockInputBlobs, isBlockInputColumns} from "./blocks/blockInput/index.js";
79
85
  import {BlockProcessor, ImportBlockOpts} from "./blocks/index.js";
80
- import {persistBlockInputs} from "./blocks/writeBlockInputToDb.ts";
86
+ import {persistBlockInput} from "./blocks/writeBlockInputToDb.js";
81
87
  import {BlsMultiThreadWorkerPool, BlsSingleThreadVerifier, IBlsVerifier} from "./bls/index.js";
82
88
  import {ColumnReconstructionTracker} from "./ColumnReconstructionTracker.js";
83
89
  import {ChainEvent, ChainEventEmitter} from "./emitter.js";
@@ -164,7 +170,7 @@ export class BeaconChain implements IBeaconChain {
164
170
  readonly lightClientServer?: LightClientServer;
165
171
  readonly reprocessController: ReprocessController;
166
172
  readonly archiveStore: ArchiveStore;
167
- readonly unfinalizedBlockWrites: JobItemQueue<[IBlockInput[]], void>;
173
+ readonly unfinalizedBlockWrites: JobItemQueue<[IBlockInput], void>;
168
174
 
169
175
  // Ops pool
170
176
  readonly attestationPool: AttestationPool;
@@ -314,12 +320,14 @@ export class BeaconChain implements IBeaconChain {
314
320
 
315
321
  this.beaconProposerCache = new BeaconProposerCache(opts);
316
322
  this.checkpointBalancesCache = new CheckpointBalancesCache();
323
+ this.serializedCache = new SerializedCache();
317
324
  this.seenBlockInputCache = new SeenBlockInput({
318
325
  config,
319
326
  custodyConfig: this.custodyConfig,
320
327
  clock,
321
328
  chainEvents: emitter,
322
329
  signal,
330
+ serializedCache: this.serializedCache,
323
331
  metrics,
324
332
  logger,
325
333
  });
@@ -406,8 +414,6 @@ export class BeaconChain implements IBeaconChain {
406
414
  this.bls = bls;
407
415
  this.emitter = emitter;
408
416
 
409
- this.serializedCache = new SerializedCache();
410
-
411
417
  this.getBlobsTracker = new GetBlobsTracker({
412
418
  logger,
413
419
  executionEngine: this.executionEngine,
@@ -429,7 +435,7 @@ export class BeaconChain implements IBeaconChain {
429
435
  );
430
436
 
431
437
  this.unfinalizedBlockWrites = new JobItemQueue(
432
- persistBlockInputs.bind(this),
438
+ persistBlockInput.bind(this),
433
439
  {
434
440
  maxLength: DEFAULT_MAX_PENDING_UNFINALIZED_BLOCK_WRITES,
435
441
  signal,
@@ -1186,7 +1192,7 @@ export class BeaconChain implements IBeaconChain {
1186
1192
  * @param blockState state that declares justified checkpoint `checkpoint`
1187
1193
  */
1188
1194
  private justifiedBalancesGetter(
1189
- checkpoint: CheckpointWithHex,
1195
+ checkpoint: CheckpointWithPayloadStatus,
1190
1196
  blockState: CachedBeaconStateAllForks
1191
1197
  ): EffectiveBalanceIncrements {
1192
1198
  this.metrics?.balancesCache.requests.inc();
@@ -1225,7 +1231,7 @@ export class BeaconChain implements IBeaconChain {
1225
1231
  * @param blockState state that declares justified checkpoint `checkpoint`
1226
1232
  */
1227
1233
  private closestJustifiedBalancesStateToCheckpoint(
1228
- checkpoint: CheckpointWithHex,
1234
+ checkpoint: CheckpointWithPayloadStatus,
1229
1235
  blockState: CachedBeaconStateAllForks
1230
1236
  ): {state: CachedBeaconStateAllForks; stateId: string; shouldWarn: boolean} {
1231
1237
  const state = this.regen.getCheckpointStateSync(checkpoint);
@@ -1239,7 +1245,10 @@ export class BeaconChain implements IBeaconChain {
1239
1245
  }
1240
1246
 
1241
1247
  // Find a state in the same branch of checkpoint at same epoch. Balances should exactly the same
1242
- for (const descendantBlock of this.forkChoice.forwardIterateDescendants(checkpoint.rootHex)) {
1248
+ for (const descendantBlock of this.forkChoice.forwardIterateDescendants(
1249
+ checkpoint.rootHex,
1250
+ checkpoint.payloadStatus
1251
+ )) {
1243
1252
  if (computeEpochAtSlot(descendantBlock.slot) === checkpoint.epoch) {
1244
1253
  const descendantBlockState = this.regen.getStateSync(descendantBlock.stateRoot);
1245
1254
  if (descendantBlockState) {
@@ -1255,7 +1264,10 @@ export class BeaconChain implements IBeaconChain {
1255
1264
 
1256
1265
  // Find a state in the same branch of checkpoint at a latter epoch. Balances are not the same, but should be close
1257
1266
  // Note: must call .forwardIterateDescendants() again since nodes are not sorted
1258
- for (const descendantBlock of this.forkChoice.forwardIterateDescendants(checkpoint.rootHex)) {
1267
+ for (const descendantBlock of this.forkChoice.forwardIterateDescendants(
1268
+ checkpoint.rootHex,
1269
+ checkpoint.payloadStatus
1270
+ )) {
1259
1271
  if (computeEpochAtSlot(descendantBlock.slot) > checkpoint.epoch) {
1260
1272
  const descendantBlockState = this.regen.getStateSync(descendantBlock.stateRoot);
1261
1273
  if (descendantBlockState) {
@@ -1,7 +1,7 @@
1
1
  import {EventEmitter} from "node:events";
2
2
  import {StrictEventEmitter} from "strict-event-emitter-types";
3
3
  import {routes} from "@lodestar/api";
4
- import {CheckpointWithPayload} from "@lodestar/fork-choice";
4
+ import {CheckpointWithPayloadStatus} from "@lodestar/fork-choice";
5
5
  import {CachedBeaconStateAllForks} from "@lodestar/state-transition";
6
6
  import {DataColumnSidecars, RootHex, deneb, phase0} from "@lodestar/types";
7
7
  import {PeerIdStr} from "../util/peerId.js";
@@ -83,8 +83,8 @@ export type ChainEventData = {
83
83
  export type IChainEvents = ApiEvents & {
84
84
  [ChainEvent.checkpoint]: (checkpoint: phase0.Checkpoint, state: CachedBeaconStateAllForks) => void;
85
85
 
86
- [ChainEvent.forkChoiceJustified]: (checkpoint: CheckpointWithPayload) => void;
87
- [ChainEvent.forkChoiceFinalized]: (checkpoint: CheckpointWithPayload) => void;
86
+ [ChainEvent.forkChoiceJustified]: (checkpoint: CheckpointWithPayloadStatus) => void;
87
+ [ChainEvent.forkChoiceFinalized]: (checkpoint: CheckpointWithPayloadStatus) => void;
88
88
 
89
89
  [ChainEvent.updateTargetCustodyGroupCount]: (targetGroupCount: number) => void;
90
90
 
@@ -1,5 +1,5 @@
1
1
  import {BuilderIndex, RootHex, Slot} from "@lodestar/types";
2
- import {GossipActionError} from "./gossipValidation.ts";
2
+ import {GossipActionError} from "./gossipValidation.js";
3
3
 
4
4
  export enum ExecutionPayloadBidErrorCode {
5
5
  BUILDER_NOT_ELIGIBLE = "EXECUTION_PAYLOAD_BID_ERROR_BUILDER_NOT_ELIGIBLE",
@@ -1,5 +1,5 @@
1
1
  import {RootHex, Slot, ValidatorIndex} from "@lodestar/types";
2
- import {GossipActionError} from "./gossipValidation.ts";
2
+ import {GossipActionError} from "./gossipValidation.js";
3
3
 
4
4
  export enum PayloadAttestationErrorCode {
5
5
  NOT_CURRENT_SLOT = "PAYLOAD_ATTESTATION_ERROR_NOT_CURRENT_SLOT",
@@ -61,7 +61,6 @@ export function computeNewStateRoot(
61
61
  * Compute the state root after processing an execution payload envelope.
62
62
  * Similar to `computeNewStateRoot` but for payload envelope processing.
63
63
  *
64
- * The `postBlockState` is mutated in place, callers must ensure it is not needed afterward.
65
64
  */
66
65
  export function computeEnvelopeStateRoot(
67
66
  metrics: Metrics | null,
@@ -74,13 +73,15 @@ export function computeEnvelopeStateRoot(
74
73
  };
75
74
 
76
75
  const processEnvelopeTimer = metrics?.blockPayload.executionPayloadEnvelopeProcessingTime.startTimer();
77
- processExecutionPayloadEnvelope(postBlockState, signedEnvelope, false);
76
+ const postEnvelopeState = processExecutionPayloadEnvelope(postBlockState, signedEnvelope, false, {
77
+ dontTransferCache: true,
78
+ });
78
79
  processEnvelopeTimer?.();
79
80
 
80
81
  const hashTreeRootTimer = metrics?.stateHashTreeRootTime.startTimer({
81
82
  source: StateHashTreeRootSource.computeEnvelopeStateRoot,
82
83
  });
83
- const stateRoot = postBlockState.hashTreeRoot();
84
+ const stateRoot = postEnvelopeState.hashTreeRoot();
84
85
  hashTreeRootTimer?.();
85
86
 
86
87
  return stateRoot;
@@ -158,7 +158,7 @@ export class StateRegenerator implements IStateRegeneratorInternal {
158
158
 
159
159
  const getSeedStateTimer = this.modules.metrics?.regenGetState.getSeedState.startTimer({caller});
160
160
  // iterateAncestorBlocks only returns ancestor blocks, not the block itself
161
- for (const b of this.modules.forkChoice.iterateAncestorBlocks(block.blockRoot)) {
161
+ for (const b of this.modules.forkChoice.iterateAncestorBlocks(block.blockRoot, block.payloadStatus)) {
162
162
  state = this.modules.blockStateCache.get(b.stateRoot);
163
163
  if (state) {
164
164
  break;
@@ -17,6 +17,7 @@ import {Metrics} from "../../metrics/metrics.js";
17
17
  import {MAX_LOOK_AHEAD_EPOCHS} from "../../sync/constants.js";
18
18
  import {IClock} from "../../util/clock.js";
19
19
  import {CustodyConfig} from "../../util/dataColumns.js";
20
+ import {SerializedCache} from "../../util/serializedCache.js";
20
21
  import {
21
22
  BlockInput,
22
23
  BlockInputBlobs,
@@ -55,6 +56,7 @@ export type SeenBlockInputCacheModules = {
55
56
  chainEvents: ChainEventEmitter;
56
57
  signal: AbortSignal;
57
58
  custodyConfig: CustodyConfig;
59
+ serializedCache: SerializedCache;
58
60
  metrics: Metrics | null;
59
61
  logger?: Logger;
60
62
  };
@@ -101,6 +103,7 @@ export class SeenBlockInput {
101
103
  private readonly clock: IClock;
102
104
  private readonly chainEvents: ChainEventEmitter;
103
105
  private readonly signal: AbortSignal;
106
+ private readonly serializedCache: SerializedCache;
104
107
  private readonly metrics: Metrics | null;
105
108
  private readonly logger?: Logger;
106
109
  private blockInputs = new Map<RootHex, IBlockInput>();
@@ -109,19 +112,35 @@ export class SeenBlockInput {
109
112
  // and the signature to ensure we only skip verification if both match
110
113
  private verifiedProposerSignatures = new Map<Slot, Map<RootHex, BLSSignature>>();
111
114
 
112
- constructor({config, custodyConfig, clock, chainEvents, signal, metrics, logger}: SeenBlockInputCacheModules) {
115
+ constructor({
116
+ config,
117
+ custodyConfig,
118
+ clock,
119
+ chainEvents,
120
+ signal,
121
+ serializedCache,
122
+ metrics,
123
+ logger,
124
+ }: SeenBlockInputCacheModules) {
113
125
  this.config = config;
114
126
  this.custodyConfig = custodyConfig;
115
127
  this.clock = clock;
116
128
  this.chainEvents = chainEvents;
117
129
  this.signal = signal;
130
+ this.serializedCache = serializedCache;
118
131
  this.metrics = metrics;
119
132
  this.logger = logger;
120
133
 
121
134
  if (metrics) {
122
- metrics.seenCache.blockInput.blockInputCount.addCollect(() =>
123
- metrics.seenCache.blockInput.blockInputCount.set(this.blockInputs.size)
124
- );
135
+ metrics.seenCache.blockInput.blockInputCount.addCollect(() => {
136
+ metrics.seenCache.blockInput.blockInputCount.set(this.blockInputs.size);
137
+ metrics.seenCache.blockInput.serializedObjectCount.set(
138
+ Array.from(this.blockInputs.values()).reduce(
139
+ (count, blockInput) => count + blockInput.getSerializedCacheKeys().length,
140
+ 0
141
+ )
142
+ );
143
+ });
125
144
  }
126
145
 
127
146
  this.chainEvents.on(ChainEvent.forkChoiceFinalized, this.onFinalized);
@@ -142,7 +161,10 @@ export class SeenBlockInput {
142
161
  * Removes the single BlockInput from the cache
143
162
  */
144
163
  remove(rootHex: RootHex): void {
145
- this.blockInputs.delete(rootHex);
164
+ const blockInput = this.blockInputs.get(rootHex);
165
+ if (blockInput) {
166
+ this.evictBlockInput(blockInput);
167
+ }
146
168
  }
147
169
 
148
170
  /**
@@ -154,7 +176,7 @@ export class SeenBlockInput {
154
176
  let deletedCount = 0;
155
177
  while (blockInput) {
156
178
  deletedCount++;
157
- this.blockInputs.delete(blockInput.blockRootHex);
179
+ this.evictBlockInput(blockInput);
158
180
  blockInput = this.blockInputs.get(parentRootHex ?? "");
159
181
  parentRootHex = blockInput?.parentRootHex;
160
182
  }
@@ -165,10 +187,10 @@ export class SeenBlockInput {
165
187
  onFinalized = (checkpoint: CheckpointWithHex) => {
166
188
  let deletedCount = 0;
167
189
  const cutoffSlot = computeStartSlotAtEpoch(checkpoint.epoch);
168
- for (const [rootHex, blockInput] of this.blockInputs) {
190
+ for (const [, blockInput] of this.blockInputs) {
169
191
  if (blockInput.slot < cutoffSlot) {
170
192
  deletedCount++;
171
- this.blockInputs.delete(rootHex);
193
+ this.evictBlockInput(blockInput);
172
194
  }
173
195
  }
174
196
  this.logger?.debug(`BlockInputCache.onFinalized deleted ${deletedCount} cached BlockInputs`);
@@ -408,14 +430,20 @@ export class SeenBlockInput {
408
430
 
409
431
  if (itemsToDelete > 0) {
410
432
  const sorted = [...this.blockInputs.entries()].sort((a, b) => a[1].slot - b[1].slot);
411
- for (const [rootHex] of sorted) {
412
- this.blockInputs.delete(rootHex);
433
+ for (const [, blockInput] of sorted) {
434
+ this.evictBlockInput(blockInput);
413
435
  itemsToDelete--;
414
436
  if (itemsToDelete <= 0) return;
415
437
  }
416
438
  }
417
439
  pruneSetToMax(this.verifiedProposerSignatures, MAX_BLOCK_INPUT_CACHE_SIZE);
418
440
  }
441
+
442
+ private evictBlockInput(blockInput: IBlockInput): void {
443
+ // Without forcefully clearing this cache, we would rely on WeakMap to evict memory which is not reliable
444
+ this.serializedCache.delete(blockInput.getSerializedCacheKeys());
445
+ this.blockInputs.delete(blockInput.blockRootHex);
446
+ }
419
447
  }
420
448
 
421
449
  enum SeenBlockInputCacheErrorCode {
package/src/db/index.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export {BeaconDb} from "./beacon.js";
2
+ export {Bucket} from "./buckets.js";
2
3
  export type {IBeaconDb} from "./interface.js";
@@ -1461,6 +1461,10 @@ export function createLodestarMetrics(
1461
1461
  name: "lodestar_seen_block_input_cache_size",
1462
1462
  help: "Number of cached BlockInputs",
1463
1463
  }),
1464
+ serializedObjectCount: register.gauge({
1465
+ name: "lodestar_seen_block_input_cache_serialized_object_count",
1466
+ help: "Number of serialized objects retained by cached BlockInputs",
1467
+ }),
1464
1468
  duplicateBlockCount: register.gauge<{source: BlockInputSource}>({
1465
1469
  name: "lodestar_seen_block_input_cache_duplicate_block_count",
1466
1470
  help: "Total number of duplicate blocks that pass validation and attempt to be cached but are known",
@@ -539,7 +539,8 @@ export class Network implements INetwork {
539
539
  this.config.getForkSeq(this.clock.currentSlot) >= ForkSeq.altair ? [Version.V2] : [Version.V2, Version.V1],
540
540
  request
541
541
  ),
542
- request
542
+ request,
543
+ this.chain.serializedCache
543
544
  );
544
545
  }
545
546
 
@@ -71,7 +71,7 @@ import {validateGossipPayloadAttestationMessage} from "../../chain/validation/pa
71
71
  import {OpSource} from "../../chain/validatorMonitor.js";
72
72
  import {Metrics} from "../../metrics/index.js";
73
73
  import {kzgCommitmentToVersionedHash} from "../../util/blobs.js";
74
- import {getBlobKzgCommitments} from "../../util/dataColumns.ts";
74
+ import {getBlobKzgCommitments} from "../../util/dataColumns.js";
75
75
  import {INetworkCore} from "../core/index.js";
76
76
  import {NetworkEventBus} from "../events.js";
77
77
  import {
@@ -11,7 +11,7 @@ import {
11
11
  GossipValidatorBatchFn,
12
12
  GossipValidatorFn,
13
13
  } from "../gossip/interface.js";
14
- import {prettyPrintPeerIdStr} from "../util.ts";
14
+ import {prettyPrintPeerIdStr} from "../util.js";
15
15
 
16
16
  export type ValidatorFnModules = {
17
17
  config: ChainForkConfig;
@@ -19,7 +19,7 @@ import {callInNextEventLoop} from "../../util/eventLoop.js";
19
19
  import {NetworkCoreMetrics} from "../core/metrics.js";
20
20
  import {INetworkEventBus, NetworkEvent} from "../events.js";
21
21
  import {MetadataController} from "../metadata.js";
22
- import {ClientKind} from "../peers/client.ts";
22
+ import {ClientKind} from "../peers/client.js";
23
23
  import {PeersData} from "../peers/peersData.js";
24
24
  import {IPeerRpcScoreStore, PeerAction} from "../peers/score/index.js";
25
25
  import {StatusCache} from "../statusCache.js";
@@ -6,7 +6,7 @@ import {computeEpochAtSlot} from "@lodestar/state-transition";
6
6
  import {deneb, phase0} from "@lodestar/types";
7
7
  import {IBeaconChain} from "../../../chain/index.js";
8
8
  import {IBeaconDb} from "../../../db/index.js";
9
- import {prettyPrintPeerId} from "../../util.ts";
9
+ import {prettyPrintPeerId} from "../../util.js";
10
10
 
11
11
  // TODO: Unit test
12
12
 
@@ -47,9 +47,10 @@ export async function* onBeaconBlocksByRange(
47
47
 
48
48
  // Non-finalized range of blocks
49
49
  if (endSlot > finalizedSlot) {
50
- const headRoot = chain.forkChoice.getHeadRoot();
50
+ const headBlock = chain.forkChoice.getHead();
51
+ const headRoot = headBlock.blockRoot;
51
52
  // TODO DENEB: forkChoice should mantain an array of canonical blocks, and change only on reorg
52
- const headChain = chain.forkChoice.getAllAncestorBlocks(headRoot);
53
+ const headChain = chain.forkChoice.getAllAncestorBlocks(headRoot, headBlock.payloadStatus);
53
54
  // getAllAncestorBlocks response includes the head node, so it's the full chain.
54
55
 
55
56
  // Iterate head chain with ascending block numbers