@lodestar/beacon-node 1.42.0-dev.4411584fd8 → 1.42.0-dev.47afaa6bb7
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.
- package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
- package/lib/api/impl/beacon/blocks/index.js +60 -29
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/beacon/pool/index.d.ts.map +1 -1
- package/lib/api/impl/beacon/pool/index.js +5 -1
- package/lib/api/impl/beacon/pool/index.js.map +1 -1
- package/lib/api/impl/beacon/state/index.d.ts.map +1 -1
- package/lib/api/impl/beacon/state/index.js +38 -40
- package/lib/api/impl/beacon/state/index.js.map +1 -1
- package/lib/api/impl/beacon/state/utils.d.ts +4 -4
- package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
- package/lib/api/impl/beacon/state/utils.js +7 -10
- package/lib/api/impl/beacon/state/utils.js.map +1 -1
- package/lib/api/impl/debug/index.js.map +1 -1
- package/lib/api/impl/lodestar/index.d.ts.map +1 -1
- package/lib/api/impl/lodestar/index.js +8 -6
- package/lib/api/impl/lodestar/index.js.map +1 -1
- package/lib/api/impl/proof/index.d.ts.map +1 -1
- package/lib/api/impl/proof/index.js +2 -6
- package/lib/api/impl/proof/index.js.map +1 -1
- package/lib/api/impl/validator/index.d.ts.map +1 -1
- package/lib/api/impl/validator/index.js +35 -29
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/api/impl/validator/utils.d.ts +2 -2
- package/lib/api/impl/validator/utils.d.ts.map +1 -1
- package/lib/api/impl/validator/utils.js +3 -3
- package/lib/api/impl/validator/utils.js.map +1 -1
- package/lib/chain/ColumnReconstructionTracker.d.ts +2 -1
- package/lib/chain/ColumnReconstructionTracker.d.ts.map +1 -1
- package/lib/chain/ColumnReconstructionTracker.js +5 -5
- package/lib/chain/ColumnReconstructionTracker.js.map +1 -1
- package/lib/chain/GetBlobsTracker.d.ts +2 -1
- package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
- package/lib/chain/GetBlobsTracker.js +14 -12
- package/lib/chain/GetBlobsTracker.js.map +1 -1
- package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
- package/lib/chain/archiveStore/archiveStore.js +1 -0
- package/lib/chain/archiveStore/archiveStore.js.map +1 -1
- package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts +3 -7
- package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +1 -1
- package/lib/chain/archiveStore/historicalState/getHistoricalState.js +8 -26
- package/lib/chain/archiveStore/historicalState/getHistoricalState.js.map +1 -1
- package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts +2 -2
- package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts.map +1 -1
- package/lib/chain/archiveStore/historicalState/historicalStateRegen.js +1 -0
- package/lib/chain/archiveStore/historicalState/historicalStateRegen.js.map +1 -1
- package/lib/chain/archiveStore/historicalState/types.d.ts +2 -0
- package/lib/chain/archiveStore/historicalState/types.d.ts.map +1 -1
- package/lib/chain/archiveStore/historicalState/types.js.map +1 -1
- package/lib/chain/archiveStore/historicalState/worker.js +1 -3
- package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
- package/lib/chain/archiveStore/interface.d.ts +1 -0
- package/lib/chain/archiveStore/interface.d.ts.map +1 -1
- package/lib/chain/balancesCache.d.ts +2 -2
- package/lib/chain/balancesCache.d.ts.map +1 -1
- package/lib/chain/balancesCache.js +4 -4
- package/lib/chain/balancesCache.js.map +1 -1
- package/lib/chain/blocks/blockInput/blockInput.d.ts +5 -5
- package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
- package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
- package/lib/chain/blocks/blockInput/types.d.ts +5 -4
- package/lib/chain/blocks/blockInput/types.d.ts.map +1 -1
- package/lib/chain/blocks/blockInput/types.js +1 -0
- package/lib/chain/blocks/blockInput/types.js.map +1 -1
- package/lib/chain/blocks/importBlock.d.ts +3 -3
- package/lib/chain/blocks/importBlock.d.ts.map +1 -1
- package/lib/chain/blocks/importBlock.js +54 -24
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/importExecutionPayload.d.ts +50 -0
- package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -0
- package/lib/chain/blocks/importExecutionPayload.js +195 -0
- package/lib/chain/blocks/importExecutionPayload.js.map +1 -0
- package/lib/chain/blocks/index.d.ts.map +1 -1
- package/lib/chain/blocks/index.js +3 -2
- package/lib/chain/blocks/index.js.map +1 -1
- package/lib/chain/blocks/payloadEnvelopeInput/index.d.ts +3 -0
- package/lib/chain/blocks/payloadEnvelopeInput/index.d.ts.map +1 -0
- package/lib/chain/blocks/payloadEnvelopeInput/index.js +3 -0
- package/lib/chain/blocks/payloadEnvelopeInput/index.js.map +1 -0
- package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +88 -0
- package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -0
- package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +279 -0
- package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -0
- package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +30 -0
- package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -0
- package/lib/chain/blocks/payloadEnvelopeInput/types.js +11 -0
- package/lib/chain/blocks/payloadEnvelopeInput/types.js.map +1 -0
- package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +15 -0
- package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts.map +1 -0
- package/lib/chain/blocks/payloadEnvelopeProcessor.js +46 -0
- package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -0
- package/lib/chain/blocks/types.d.ts +28 -15
- package/lib/chain/blocks/types.d.ts.map +1 -1
- package/lib/chain/blocks/types.js.map +1 -1
- package/lib/chain/blocks/utils/checkpoint.d.ts +2 -2
- package/lib/chain/blocks/utils/checkpoint.d.ts.map +1 -1
- package/lib/chain/blocks/utils/checkpoint.js.map +1 -1
- package/lib/chain/blocks/verifyBlock.d.ts +2 -2
- package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlock.js +4 -4
- package/lib/chain/blocks/verifyBlock.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +5 -5
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +5 -4
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksSignatures.d.ts +2 -2
- package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksSignatures.js +4 -2
- package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts +3 -3
- package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js +3 -3
- package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
- package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts +12 -0
- package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts.map +1 -0
- package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js +40 -0
- package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js.map +1 -0
- package/lib/chain/chain.d.ts +22 -16
- package/lib/chain/chain.d.ts.map +1 -1
- package/lib/chain/chain.js +142 -69
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/emitter.d.ts +31 -9
- package/lib/chain/emitter.d.ts.map +1 -1
- package/lib/chain/emitter.js +12 -3
- package/lib/chain/emitter.js.map +1 -1
- package/lib/chain/errors/blockError.d.ts +10 -5
- package/lib/chain/errors/blockError.d.ts.map +1 -1
- package/lib/chain/errors/blockError.js +2 -0
- package/lib/chain/errors/blockError.js.map +1 -1
- package/lib/chain/errors/dataColumnSidecarError.d.ts +31 -1
- package/lib/chain/errors/dataColumnSidecarError.d.ts.map +1 -1
- package/lib/chain/errors/dataColumnSidecarError.js +7 -0
- package/lib/chain/errors/dataColumnSidecarError.js.map +1 -1
- package/lib/chain/errors/executionPayloadEnvelope.d.ts +12 -2
- package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
- package/lib/chain/errors/executionPayloadEnvelope.js +3 -1
- package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
- package/lib/chain/forkChoice/index.d.ts +4 -4
- package/lib/chain/forkChoice/index.d.ts.map +1 -1
- package/lib/chain/forkChoice/index.js +30 -34
- package/lib/chain/forkChoice/index.js.map +1 -1
- package/lib/chain/initState.d.ts +2 -2
- package/lib/chain/initState.d.ts.map +1 -1
- package/lib/chain/initState.js +1 -1
- package/lib/chain/initState.js.map +1 -1
- package/lib/chain/interface.d.ts +21 -17
- package/lib/chain/interface.d.ts.map +1 -1
- package/lib/chain/lightClient/index.d.ts +2 -2
- package/lib/chain/lightClient/index.d.ts.map +1 -1
- package/lib/chain/lightClient/index.js +11 -4
- package/lib/chain/lightClient/index.js.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.d.ts +6 -6
- package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.js +13 -13
- package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
- package/lib/chain/opPools/executionPayloadBidPool.d.ts +2 -2
- package/lib/chain/opPools/executionPayloadBidPool.d.ts.map +1 -1
- package/lib/chain/opPools/executionPayloadBidPool.js +2 -2
- package/lib/chain/opPools/executionPayloadBidPool.js.map +1 -1
- package/lib/chain/opPools/opPool.d.ts +3 -3
- package/lib/chain/opPools/opPool.d.ts.map +1 -1
- package/lib/chain/opPools/opPool.js +7 -7
- package/lib/chain/opPools/opPool.js.map +1 -1
- package/lib/chain/opPools/utils.d.ts +2 -2
- package/lib/chain/opPools/utils.d.ts.map +1 -1
- package/lib/chain/opPools/utils.js +1 -1
- package/lib/chain/opPools/utils.js.map +1 -1
- package/lib/chain/options.d.ts +1 -0
- package/lib/chain/options.d.ts.map +1 -1
- package/lib/chain/options.js +1 -0
- package/lib/chain/options.js.map +1 -1
- package/lib/chain/prepareNextSlot.d.ts +2 -2
- package/lib/chain/prepareNextSlot.d.ts.map +1 -1
- package/lib/chain/prepareNextSlot.js +10 -4
- package/lib/chain/prepareNextSlot.js.map +1 -1
- package/lib/chain/produceBlock/computeNewStateRoot.d.ts +4 -4
- package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
- package/lib/chain/produceBlock/computeNewStateRoot.js +14 -10
- package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts +7 -7
- package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +32 -17
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/regen/interface.d.ts +15 -13
- package/lib/chain/regen/interface.d.ts.map +1 -1
- package/lib/chain/regen/interface.js +2 -0
- package/lib/chain/regen/interface.js.map +1 -1
- package/lib/chain/regen/queued.d.ts +14 -14
- package/lib/chain/regen/queued.d.ts.map +1 -1
- package/lib/chain/regen/queued.js.map +1 -1
- package/lib/chain/regen/regen.d.ts +6 -5
- package/lib/chain/regen/regen.d.ts.map +1 -1
- package/lib/chain/regen/regen.js +6 -6
- package/lib/chain/regen/regen.js.map +1 -1
- package/lib/chain/seenCache/index.d.ts +1 -1
- package/lib/chain/seenCache/index.d.ts.map +1 -1
- package/lib/chain/seenCache/index.js +1 -1
- package/lib/chain/seenCache/index.js.map +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.d.ts +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.js +4 -4
- package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
- package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +38 -0
- package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -0
- package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +76 -0
- package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -0
- package/lib/chain/serializeState.d.ts +2 -2
- package/lib/chain/serializeState.d.ts.map +1 -1
- package/lib/chain/serializeState.js +1 -1
- package/lib/chain/serializeState.js.map +1 -1
- package/lib/chain/shufflingCache.d.ts +2 -2
- package/lib/chain/shufflingCache.d.ts.map +1 -1
- package/lib/chain/shufflingCache.js +3 -4
- package/lib/chain/shufflingCache.js.map +1 -1
- package/lib/chain/stateCache/fifoBlockStateCache.d.ts +6 -6
- package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -1
- package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +11 -11
- package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.js +12 -16
- package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
- package/lib/chain/stateCache/types.d.ts +14 -14
- package/lib/chain/stateCache/types.d.ts.map +1 -1
- package/lib/chain/stateCache/types.js.map +1 -1
- package/lib/chain/validation/attesterSlashing.js +3 -3
- package/lib/chain/validation/attesterSlashing.js.map +1 -1
- package/lib/chain/validation/blobSidecar.js +1 -1
- package/lib/chain/validation/blobSidecar.js.map +1 -1
- package/lib/chain/validation/block.d.ts.map +1 -1
- package/lib/chain/validation/block.js +15 -6
- package/lib/chain/validation/block.js.map +1 -1
- package/lib/chain/validation/blsToExecutionChange.js +2 -2
- package/lib/chain/validation/blsToExecutionChange.js.map +1 -1
- package/lib/chain/validation/dataColumnSidecar.d.ts +11 -4
- package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
- package/lib/chain/validation/dataColumnSidecar.js +185 -6
- package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
- package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
- package/lib/chain/validation/executionPayloadBid.js +10 -7
- package/lib/chain/validation/executionPayloadBid.js.map +1 -1
- package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
- package/lib/chain/validation/executionPayloadEnvelope.js +34 -19
- package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
- package/lib/chain/validation/payloadAttestationMessage.js +5 -3
- package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
- package/lib/chain/validation/proposerSlashing.js +1 -1
- package/lib/chain/validation/proposerSlashing.js.map +1 -1
- package/lib/chain/validation/signatureSets/contributionAndProof.d.ts +2 -2
- package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/contributionAndProof.js +1 -1
- package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommittee.d.ts +2 -2
- package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommittee.js +1 -1
- package/lib/chain/validation/signatureSets/syncCommittee.js.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts +2 -2
- package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommitteeContribution.js.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts +2 -2
- package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js +1 -1
- package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js.map +1 -1
- package/lib/chain/validation/syncCommittee.d.ts +4 -4
- package/lib/chain/validation/syncCommittee.d.ts.map +1 -1
- package/lib/chain/validation/syncCommittee.js +17 -12
- package/lib/chain/validation/syncCommittee.js.map +1 -1
- package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
- package/lib/chain/validation/syncCommitteeContributionAndProof.js +5 -2
- package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
- package/lib/chain/validation/voluntaryExit.d.ts.map +1 -1
- package/lib/chain/validation/voluntaryExit.js +3 -3
- package/lib/chain/validation/voluntaryExit.js.map +1 -1
- package/lib/chain/validatorMonitor.d.ts +5 -4
- package/lib/chain/validatorMonitor.d.ts.map +1 -1
- package/lib/chain/validatorMonitor.js +14 -9
- package/lib/chain/validatorMonitor.js.map +1 -1
- package/lib/db/buckets.d.ts +2 -2
- package/lib/db/buckets.d.ts.map +1 -1
- package/lib/db/buckets.js +2 -2
- package/lib/db/buckets.js.map +1 -1
- package/lib/db/repositories/blockArchiveIndex.d.ts +2 -2
- package/lib/db/repositories/blockArchiveIndex.d.ts.map +1 -1
- package/lib/db/repositories/dataColumnSidecar.d.ts.map +1 -1
- package/lib/db/repositories/dataColumnSidecar.js +4 -2
- package/lib/db/repositories/dataColumnSidecar.js.map +1 -1
- package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +1 -1
- package/lib/db/repositories/dataColumnSidecarArchive.js +4 -2
- package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +60 -4
- package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
- package/lib/metrics/metrics/lodestar.js +126 -15
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/network/gossip/encoding.d.ts.map +1 -1
- package/lib/network/gossip/encoding.js +15 -0
- package/lib/network/gossip/encoding.js.map +1 -1
- package/lib/network/interface.d.ts +7 -4
- package/lib/network/interface.d.ts.map +1 -1
- package/lib/network/libp2p/index.d.ts.map +1 -1
- package/lib/network/libp2p/index.js +22 -11
- package/lib/network/libp2p/index.js.map +1 -1
- package/lib/network/network.d.ts +7 -4
- package/lib/network/network.d.ts.map +1 -1
- package/lib/network/network.js +12 -3
- package/lib/network/network.js.map +1 -1
- package/lib/network/options.d.ts.map +1 -1
- package/lib/network/options.js +7 -2
- package/lib/network/options.js.map +1 -1
- package/lib/network/processor/extractSlotRootFns.d.ts +1 -1
- package/lib/network/processor/extractSlotRootFns.d.ts.map +1 -1
- package/lib/network/processor/extractSlotRootFns.js +34 -4
- package/lib/network/processor/extractSlotRootFns.js.map +1 -1
- package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
- package/lib/network/processor/gossipHandlers.js +287 -70
- package/lib/network/processor/gossipHandlers.js.map +1 -1
- package/lib/network/processor/index.d.ts +22 -7
- package/lib/network/processor/index.d.ts.map +1 -1
- package/lib/network/processor/index.js +313 -80
- package/lib/network/processor/index.js.map +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.js +9 -0
- package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts +8 -0
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts.map +1 -0
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js +69 -0
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js.map +1 -0
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.d.ts +6 -0
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.d.ts.map +1 -0
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js +28 -0
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js.map +1 -0
- package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
- package/lib/network/reqresp/handlers/index.js +11 -1
- package/lib/network/reqresp/handlers/index.js.map +1 -1
- package/lib/network/reqresp/protocols.d.ts +2 -0
- package/lib/network/reqresp/protocols.d.ts.map +1 -1
- package/lib/network/reqresp/protocols.js +10 -0
- package/lib/network/reqresp/protocols.js.map +1 -1
- package/lib/network/reqresp/rateLimit.d.ts.map +1 -1
- package/lib/network/reqresp/rateLimit.js +8 -0
- package/lib/network/reqresp/rateLimit.js.map +1 -1
- package/lib/network/reqresp/score.d.ts.map +1 -1
- package/lib/network/reqresp/score.js +2 -0
- package/lib/network/reqresp/score.js.map +1 -1
- package/lib/network/reqresp/types.d.ts +10 -4
- package/lib/network/reqresp/types.d.ts.map +1 -1
- package/lib/network/reqresp/types.js +16 -4
- package/lib/network/reqresp/types.js.map +1 -1
- package/lib/node/nodejs.d.ts +2 -2
- package/lib/node/nodejs.d.ts.map +1 -1
- package/lib/node/nodejs.js +3 -3
- package/lib/node/nodejs.js.map +1 -1
- package/lib/node/notifier.d.ts.map +1 -1
- package/lib/node/notifier.js +3 -3
- package/lib/node/notifier.js.map +1 -1
- package/lib/sync/backfill/backfill.d.ts +2 -2
- package/lib/sync/backfill/backfill.d.ts.map +1 -1
- package/lib/sync/backfill/backfill.js +2 -2
- package/lib/sync/backfill/backfill.js.map +1 -1
- package/lib/sync/unknownBlock.d.ts +3 -9
- package/lib/sync/unknownBlock.d.ts.map +1 -1
- package/lib/sync/unknownBlock.js +10 -43
- package/lib/sync/unknownBlock.js.map +1 -1
- package/lib/sync/utils/downloadByRange.d.ts +3 -3
- package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
- package/lib/sync/utils/downloadByRange.js +4 -2
- package/lib/sync/utils/downloadByRange.js.map +1 -1
- package/lib/sync/utils/downloadByRoot.d.ts +3 -3
- package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
- package/lib/sync/utils/downloadByRoot.js +10 -5
- package/lib/sync/utils/downloadByRoot.js.map +1 -1
- package/lib/util/blobs.d.ts +3 -3
- package/lib/util/blobs.d.ts.map +1 -1
- package/lib/util/blobs.js +21 -10
- package/lib/util/blobs.js.map +1 -1
- package/lib/util/dataColumns.d.ts +18 -11
- package/lib/util/dataColumns.d.ts.map +1 -1
- package/lib/util/dataColumns.js +51 -17
- package/lib/util/dataColumns.js.map +1 -1
- package/lib/util/execution.d.ts +6 -2
- package/lib/util/execution.d.ts.map +1 -1
- package/lib/util/execution.js +49 -25
- package/lib/util/execution.js.map +1 -1
- package/lib/util/sszBytes.d.ts +29 -2
- package/lib/util/sszBytes.d.ts.map +1 -1
- package/lib/util/sszBytes.js +258 -14
- package/lib/util/sszBytes.js.map +1 -1
- package/lib/util/types.d.ts +2 -0
- package/lib/util/types.d.ts.map +1 -1
- package/lib/util/types.js +1 -0
- package/lib/util/types.js.map +1 -1
- package/package.json +16 -16
- package/src/api/impl/beacon/blocks/index.ts +69 -33
- package/src/api/impl/beacon/pool/index.ts +5 -1
- package/src/api/impl/beacon/state/index.ts +43 -55
- package/src/api/impl/beacon/state/utils.ts +11 -25
- package/src/api/impl/debug/index.ts +2 -2
- package/src/api/impl/lodestar/index.ts +8 -8
- package/src/api/impl/proof/index.ts +2 -9
- package/src/api/impl/validator/index.ts +38 -43
- package/src/api/impl/validator/utils.ts +4 -7
- package/src/chain/ColumnReconstructionTracker.ts +6 -5
- package/src/chain/GetBlobsTracker.ts +14 -12
- package/src/chain/archiveStore/archiveStore.ts +1 -0
- package/src/chain/archiveStore/historicalState/getHistoricalState.ts +10 -39
- package/src/chain/archiveStore/historicalState/historicalStateRegen.ts +2 -1
- package/src/chain/archiveStore/historicalState/types.ts +2 -0
- package/src/chain/archiveStore/historicalState/worker.ts +1 -4
- package/src/chain/archiveStore/interface.ts +1 -0
- package/src/chain/balancesCache.ts +5 -11
- package/src/chain/blocks/blockInput/blockInput.ts +8 -8
- package/src/chain/blocks/blockInput/types.ts +5 -4
- package/src/chain/blocks/importBlock.ts +85 -32
- package/src/chain/blocks/importExecutionPayload.ts +277 -0
- package/src/chain/blocks/index.ts +3 -2
- package/src/chain/blocks/payloadEnvelopeInput/index.ts +2 -0
- package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +377 -0
- package/src/chain/blocks/payloadEnvelopeInput/types.ts +34 -0
- package/src/chain/blocks/payloadEnvelopeProcessor.ts +61 -0
- package/src/chain/blocks/types.ts +34 -15
- package/src/chain/blocks/utils/checkpoint.ts +2 -2
- package/src/chain/blocks/verifyBlock.ts +5 -10
- package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +10 -14
- package/src/chain/blocks/verifyBlocksSignatures.ts +10 -3
- package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +6 -8
- package/src/chain/blocks/writePayloadEnvelopeInputToDb.ts +55 -0
- package/src/chain/chain.ts +188 -101
- package/src/chain/emitter.ts +27 -9
- package/src/chain/errors/blockError.ts +8 -5
- package/src/chain/errors/dataColumnSidecarError.ts +32 -1
- package/src/chain/errors/executionPayloadEnvelope.ts +6 -2
- package/src/chain/forkChoice/index.ts +35 -51
- package/src/chain/initState.ts +7 -2
- package/src/chain/interface.ts +22 -18
- package/src/chain/lightClient/index.ts +17 -18
- package/src/chain/opPools/aggregatedAttestationPool.ts +20 -21
- package/src/chain/opPools/executionPayloadBidPool.ts +3 -3
- package/src/chain/opPools/opPool.ts +13 -14
- package/src/chain/opPools/utils.ts +3 -3
- package/src/chain/options.ts +2 -0
- package/src/chain/prepareNextSlot.ts +14 -8
- package/src/chain/produceBlock/computeNewStateRoot.ts +18 -16
- package/src/chain/produceBlock/produceBlockBody.ts +51 -48
- package/src/chain/regen/interface.ts +15 -17
- package/src/chain/regen/queued.ts +16 -20
- package/src/chain/regen/regen.ts +16 -17
- package/src/chain/seenCache/index.ts +1 -1
- package/src/chain/seenCache/seenGossipBlockInput.ts +4 -4
- package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +106 -0
- package/src/chain/serializeState.ts +3 -3
- package/src/chain/shufflingCache.ts +5 -7
- package/src/chain/stateCache/fifoBlockStateCache.ts +7 -7
- package/src/chain/stateCache/persistentCheckpointsCache.ts +27 -42
- package/src/chain/stateCache/types.ts +14 -18
- package/src/chain/validation/attesterSlashing.ts +3 -3
- package/src/chain/validation/blobSidecar.ts +1 -1
- package/src/chain/validation/block.ts +16 -10
- package/src/chain/validation/blsToExecutionChange.ts +2 -2
- package/src/chain/validation/dataColumnSidecar.ts +231 -8
- package/src/chain/validation/executionPayloadBid.ts +10 -10
- package/src/chain/validation/executionPayloadEnvelope.ts +42 -26
- package/src/chain/validation/payloadAttestationMessage.ts +6 -4
- package/src/chain/validation/proposerSlashing.ts +1 -1
- package/src/chain/validation/signatureSets/contributionAndProof.ts +2 -7
- package/src/chain/validation/signatureSets/syncCommittee.ts +2 -7
- package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +2 -2
- package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +2 -7
- package/src/chain/validation/syncCommittee.ts +25 -20
- package/src/chain/validation/syncCommitteeContributionAndProof.ts +9 -10
- package/src/chain/validation/voluntaryExit.ts +3 -8
- package/src/chain/validatorMonitor.ts +25 -13
- package/src/db/buckets.ts +2 -2
- package/src/db/repositories/dataColumnSidecar.ts +4 -2
- package/src/db/repositories/dataColumnSidecarArchive.ts +4 -2
- package/src/metrics/metrics/lodestar.ts +134 -19
- package/src/network/gossip/encoding.ts +16 -0
- package/src/network/interface.ts +18 -4
- package/src/network/libp2p/index.ts +24 -13
- package/src/network/network.ts +39 -8
- package/src/network/options.ts +7 -2
- package/src/network/processor/extractSlotRootFns.ts +43 -4
- package/src/network/processor/gossipHandlers.ts +356 -80
- package/src/network/processor/index.ts +395 -92
- package/src/network/reqresp/ReqRespBeaconNode.ts +13 -0
- package/src/network/reqresp/handlers/executionPayloadEnvelopesByRange.ts +94 -0
- package/src/network/reqresp/handlers/executionPayloadEnvelopesByRoot.ts +43 -0
- package/src/network/reqresp/handlers/index.ts +12 -0
- package/src/network/reqresp/protocols.ts +12 -0
- package/src/network/reqresp/rateLimit.ts +18 -0
- package/src/network/reqresp/score.ts +2 -0
- package/src/network/reqresp/types.ts +26 -5
- package/src/node/nodejs.ts +6 -5
- package/src/node/notifier.ts +5 -6
- package/src/sync/backfill/backfill.ts +3 -3
- package/src/sync/unknownBlock.ts +13 -53
- package/src/sync/utils/downloadByRange.ts +9 -7
- package/src/sync/utils/downloadByRoot.ts +16 -12
- package/src/util/blobs.ts +35 -15
- package/src/util/dataColumns.ts +69 -25
- package/src/util/execution.ts +49 -30
- package/src/util/sszBytes.ts +335 -13
- package/src/util/types.ts +6 -0
- package/lib/chain/seenCache/seenExecutionPayloadEnvelope.d.ts +0 -15
- package/lib/chain/seenCache/seenExecutionPayloadEnvelope.d.ts.map +0 -1
- package/lib/chain/seenCache/seenExecutionPayloadEnvelope.js +0 -28
- package/lib/chain/seenCache/seenExecutionPayloadEnvelope.js.map +0 -1
- package/src/chain/seenCache/seenExecutionPayloadEnvelope.ts +0 -34
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import {Tree} from "@chainsafe/persistent-merkle-tree";
|
|
2
1
|
import {routes} from "@lodestar/api";
|
|
3
2
|
import {ApplicationMethods} from "@lodestar/api/server";
|
|
4
3
|
import {ChainForkConfig} from "@lodestar/config";
|
|
5
4
|
import {Repository} from "@lodestar/db";
|
|
6
5
|
import {ForkSeq, SLOTS_PER_EPOCH} from "@lodestar/params";
|
|
7
|
-
import {
|
|
6
|
+
import {isStatePostCapella} from "@lodestar/state-transition";
|
|
8
7
|
import {ssz} from "@lodestar/types";
|
|
9
8
|
import {Checkpoint} from "@lodestar/types/phase0";
|
|
10
9
|
import {fromHex, toHex, toRootHex} from "@lodestar/utils";
|
|
@@ -86,7 +85,7 @@ export function getLodestarApi({
|
|
|
86
85
|
|
|
87
86
|
async getLatestWeakSubjectivityCheckpointEpoch() {
|
|
88
87
|
const state = chain.getHeadState();
|
|
89
|
-
return {data: getLatestWeakSubjectivityCheckpointEpoch(
|
|
88
|
+
return {data: state.getLatestWeakSubjectivityCheckpointEpoch()};
|
|
90
89
|
},
|
|
91
90
|
|
|
92
91
|
async getSyncChainsDebugState() {
|
|
@@ -214,22 +213,23 @@ export function getLodestarApi({
|
|
|
214
213
|
async getHistoricalSummaries({stateId}) {
|
|
215
214
|
const {state, executionOptimistic, finalized} = await getStateResponseWithRegen(chain, stateId);
|
|
216
215
|
|
|
217
|
-
const stateView = (
|
|
218
|
-
state instanceof Uint8Array ? loadState(config, chain.getHeadState(), state).state : state
|
|
219
|
-
) as BeaconStateCapella;
|
|
216
|
+
const stateView = state instanceof Uint8Array ? chain.getHeadState().loadOtherState(state) : state;
|
|
220
217
|
|
|
221
218
|
const fork = config.getForkName(stateView.slot);
|
|
222
219
|
if (ForkSeq[fork] < ForkSeq.capella) {
|
|
223
220
|
throw new Error("Historical summaries are not supported before Capella");
|
|
224
221
|
}
|
|
222
|
+
if (!isStatePostCapella(stateView)) {
|
|
223
|
+
throw new Error("Expected Capella state for historical summaries");
|
|
224
|
+
}
|
|
225
225
|
|
|
226
226
|
const {gindex} = ssz[fork].BeaconState.getPathInfo(["historicalSummaries"]);
|
|
227
|
-
const proof =
|
|
227
|
+
const proof = stateView.getSingleProof(gindex);
|
|
228
228
|
|
|
229
229
|
return {
|
|
230
230
|
data: {
|
|
231
231
|
slot: stateView.slot,
|
|
232
|
-
historicalSummaries: stateView.historicalSummaries
|
|
232
|
+
historicalSummaries: stateView.historicalSummaries,
|
|
233
233
|
proof: proof,
|
|
234
234
|
},
|
|
235
235
|
meta: {executionOptimistic, finalized, version: fork},
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import {CompactMultiProof, ProofType, createProof} from "@chainsafe/persistent-merkle-tree";
|
|
2
2
|
import {routes} from "@lodestar/api";
|
|
3
3
|
import {ApplicationMethods} from "@lodestar/api/server";
|
|
4
|
-
import {loadState} from "@lodestar/state-transition";
|
|
5
4
|
import {ApiOptions} from "../../options.js";
|
|
6
5
|
import {getBlockResponse} from "../beacon/blocks/utils.js";
|
|
7
6
|
import {getStateResponseWithRegen} from "../beacon/state/utils.js";
|
|
@@ -24,16 +23,10 @@ export function getProofApi(
|
|
|
24
23
|
|
|
25
24
|
const res = await getStateResponseWithRegen(chain, stateId);
|
|
26
25
|
|
|
27
|
-
const state =
|
|
28
|
-
res.state instanceof Uint8Array ? loadState(config, chain.getHeadState(), res.state).state : res.state;
|
|
29
|
-
|
|
30
|
-
// there should be no state changes in beacon-node so no need to commit() here
|
|
31
|
-
const stateNode = state.node;
|
|
32
|
-
|
|
33
|
-
const proof = createProof(stateNode, {type: ProofType.compactMulti, descriptor});
|
|
26
|
+
const state = res.state instanceof Uint8Array ? chain.getHeadState().loadOtherState(res.state) : res.state;
|
|
34
27
|
|
|
35
28
|
return {
|
|
36
|
-
data:
|
|
29
|
+
data: state.createMultiProof(descriptor),
|
|
37
30
|
meta: {version: config.getForkName(state.slot)},
|
|
38
31
|
};
|
|
39
32
|
},
|
|
@@ -17,19 +17,15 @@ import {
|
|
|
17
17
|
isForkPostGloas,
|
|
18
18
|
} from "@lodestar/params";
|
|
19
19
|
import {
|
|
20
|
-
CachedBeaconStateAllForks,
|
|
21
20
|
DataAvailabilityStatus,
|
|
22
|
-
|
|
21
|
+
IBeaconStateView,
|
|
23
22
|
beaconBlockToBlinded,
|
|
24
23
|
calculateCommitteeAssignments,
|
|
25
24
|
computeEpochAtSlot,
|
|
26
25
|
computeStartSlotAtEpoch,
|
|
27
26
|
computeTimeAtSlot,
|
|
28
|
-
createCachedBeaconState,
|
|
29
|
-
createPubkeyCache,
|
|
30
|
-
getBlockRootAtSlot,
|
|
31
27
|
getCurrentSlot,
|
|
32
|
-
|
|
28
|
+
isStatePostAltair,
|
|
33
29
|
proposerShufflingDecisionRoot,
|
|
34
30
|
} from "@lodestar/state-transition";
|
|
35
31
|
import {
|
|
@@ -193,11 +189,13 @@ export function getValidatorApi(
|
|
|
193
189
|
const MAX_API_CLOCK_DISPARITY_MS = MAX_API_CLOCK_DISPARITY_SEC * 1000;
|
|
194
190
|
|
|
195
191
|
/** Compute and cache the genesis block root */
|
|
196
|
-
async function getGenesisBlockRoot(state:
|
|
192
|
+
async function getGenesisBlockRoot(state: IBeaconStateView): Promise<Root> {
|
|
197
193
|
if (!genesisBlockRoot) {
|
|
198
194
|
// Close to genesis the genesis block may not be available in the DB
|
|
199
|
-
if (state.slot
|
|
200
|
-
genesisBlockRoot = state.
|
|
195
|
+
if (state.slot === GENESIS_SLOT) {
|
|
196
|
+
genesisBlockRoot = state.computeAnchorCheckpoint().checkpoint.root;
|
|
197
|
+
} else if (state.slot < SLOTS_PER_HISTORICAL_ROOT) {
|
|
198
|
+
genesisBlockRoot = state.getBlockRootAtSlot(GENESIS_SLOT);
|
|
201
199
|
}
|
|
202
200
|
|
|
203
201
|
const blockRes = await chain.getCanonicalBlockAtSlot(GENESIS_SLOT);
|
|
@@ -303,7 +301,7 @@ export function getValidatorApi(
|
|
|
303
301
|
* |
|
|
304
302
|
* prepareNextSlot (4s before next slot)
|
|
305
303
|
*/
|
|
306
|
-
async function waitForCheckpointState(cpHex: CheckpointHexPayload): Promise<
|
|
304
|
+
async function waitForCheckpointState(cpHex: CheckpointHexPayload): Promise<IBeaconStateView | null> {
|
|
307
305
|
const cpState = chain.regen.getCheckpointStateSync(cpHex);
|
|
308
306
|
if (cpState) {
|
|
309
307
|
return cpState;
|
|
@@ -995,7 +993,7 @@ export function getValidatorApi(
|
|
|
995
993
|
headBlockRoot
|
|
996
994
|
: // Permit attesting to slots *prior* to the current head. This is desirable when
|
|
997
995
|
// the VC and BN are out-of-sync due to time issues or overloading.
|
|
998
|
-
getBlockRootAtSlot(
|
|
996
|
+
headState.getBlockRootAtSlot(slot);
|
|
999
997
|
|
|
1000
998
|
let index: CommitteeIndex;
|
|
1001
999
|
if (isForkPostGloas(fork)) {
|
|
@@ -1026,7 +1024,7 @@ export function getValidatorApi(
|
|
|
1026
1024
|
targetSlot >= headSlot
|
|
1027
1025
|
? // If the state is earlier than the target slot then the target *must* be the head block root.
|
|
1028
1026
|
headBlockRoot
|
|
1029
|
-
: getBlockRootAtSlot(
|
|
1027
|
+
: headState.getBlockRootAtSlot(targetSlot);
|
|
1030
1028
|
|
|
1031
1029
|
// Check the execution status as validator shouldn't vote on an optimistic head
|
|
1032
1030
|
// Check on target is sufficient as a valid target would imply a valid source
|
|
@@ -1068,7 +1066,7 @@ export function getValidatorApi(
|
|
|
1068
1066
|
// see https://github.com/ChainSafe/lodestar/issues/5063
|
|
1069
1067
|
if (!chain.forkChoice.hasBlock(beaconBlockRoot)) {
|
|
1070
1068
|
const rootHex = toRootHex(beaconBlockRoot);
|
|
1071
|
-
network.
|
|
1069
|
+
network.searchUnknownBlock({slot, root: rootHex}, BlockInputSource.api);
|
|
1072
1070
|
// if result of this call is false, i.e. block hasn't seen after 1 slot then the below notOnOptimisticBlockRoot call will throw error
|
|
1073
1071
|
await chain.waitForBlock(slot, rootHex);
|
|
1074
1072
|
}
|
|
@@ -1103,7 +1101,7 @@ export function getValidatorApi(
|
|
|
1103
1101
|
}
|
|
1104
1102
|
|
|
1105
1103
|
const head = chain.forkChoice.getHead();
|
|
1106
|
-
let state:
|
|
1104
|
+
let state: IBeaconStateView | undefined = undefined;
|
|
1107
1105
|
const startSlot = computeStartSlotAtEpoch(epoch);
|
|
1108
1106
|
const prepareNextSlotLookAheadMs =
|
|
1109
1107
|
config.SLOT_DURATION_MS - config.getSlotComponentDurationMs(PREPARE_NEXT_SLOT_BPS);
|
|
@@ -1133,43 +1131,34 @@ export function getValidatorApi(
|
|
|
1133
1131
|
} else {
|
|
1134
1132
|
const res = await getStateResponseWithRegen(chain, startSlot);
|
|
1135
1133
|
|
|
1136
|
-
|
|
1137
|
-
res.state instanceof Uint8Array ? loadState(config, chain.getHeadState(), res.state).state : res.state;
|
|
1134
|
+
state = res.state instanceof Uint8Array ? chain.getHeadState().loadOtherState(res.state) : res.state;
|
|
1138
1135
|
|
|
1139
|
-
state
|
|
1140
|
-
|
|
1141
|
-
{
|
|
1142
|
-
config: chain.config,
|
|
1143
|
-
// Not required to compute proposers
|
|
1144
|
-
pubkeyCache: createPubkeyCache(),
|
|
1145
|
-
},
|
|
1146
|
-
{skipSyncPubkeys: true, skipSyncCommitteeCache: true}
|
|
1147
|
-
);
|
|
1148
|
-
|
|
1149
|
-
if (state.epochCtx.epoch !== epoch) {
|
|
1150
|
-
throw Error(`Loaded state epoch ${state.epochCtx.epoch} does not match requested epoch ${epoch}`);
|
|
1136
|
+
if (state.epoch !== epoch) {
|
|
1137
|
+
throw Error(`Loaded state epoch ${state.epoch} does not match requested epoch ${epoch}`);
|
|
1151
1138
|
}
|
|
1152
1139
|
}
|
|
1153
1140
|
}
|
|
1154
1141
|
|
|
1155
|
-
const stateEpoch = state.
|
|
1142
|
+
const stateEpoch = state.epoch;
|
|
1156
1143
|
let indexes: ValidatorIndex[] = [];
|
|
1157
1144
|
|
|
1158
1145
|
switch (epoch) {
|
|
1159
1146
|
case stateEpoch:
|
|
1160
|
-
indexes = state.
|
|
1147
|
+
indexes = state.currentProposers;
|
|
1161
1148
|
break;
|
|
1162
1149
|
|
|
1163
|
-
case stateEpoch + 1:
|
|
1150
|
+
case stateEpoch + 1: {
|
|
1164
1151
|
// make sure shuffling is calculated and ready for next call to calculate nextProposers
|
|
1165
|
-
|
|
1152
|
+
const nextEpoch = state.epoch + 1;
|
|
1153
|
+
await chain.shufflingCache.get(nextEpoch, state.nextDecisionRoot);
|
|
1166
1154
|
// Requesting duties for next epoch is allowed since they can be predicted with high probabilities.
|
|
1167
1155
|
// @see `epochCtx.getBeaconProposersNextEpoch` JSDocs for rationale.
|
|
1168
|
-
indexes = state.
|
|
1156
|
+
indexes = state.nextProposers;
|
|
1169
1157
|
break;
|
|
1158
|
+
}
|
|
1170
1159
|
|
|
1171
1160
|
case stateEpoch - 1: {
|
|
1172
|
-
const indexesPrevEpoch = state.
|
|
1161
|
+
const indexesPrevEpoch = state.previousProposers;
|
|
1173
1162
|
if (indexesPrevEpoch === null) {
|
|
1174
1163
|
// Should not happen as previous proposer duties should be initialized for head state
|
|
1175
1164
|
// and if we load state from `Uint8Array` it will always be the state of requested epoch
|
|
@@ -1188,7 +1177,7 @@ export function getValidatorApi(
|
|
|
1188
1177
|
// See benchmark -> packages/lodestar/test/perf/api/impl/validator/attester.test.ts
|
|
1189
1178
|
// After dropping the flat caches attached to the CachedBeaconState it's no longer available.
|
|
1190
1179
|
// TODO: Add a flag to just send 0x00 as pubkeys since the Lodestar validator does not need them.
|
|
1191
|
-
const pubkeys = getPubkeysForIndices(state
|
|
1180
|
+
const pubkeys = getPubkeysForIndices(state, indexes);
|
|
1192
1181
|
|
|
1193
1182
|
const duties: routes.validator.ProposerDuty[] = [];
|
|
1194
1183
|
for (let i = 0; i < SLOTS_PER_EPOCH; i++) {
|
|
@@ -1242,8 +1231,8 @@ export function getValidatorApi(
|
|
|
1242
1231
|
// will equal `currentEpoch + 1`
|
|
1243
1232
|
|
|
1244
1233
|
// Check that all validatorIndex belong to the state before calling getCommitteeAssignments()
|
|
1245
|
-
const pubkeys = getPubkeysForIndices(state
|
|
1246
|
-
const decisionRoot = state.
|
|
1234
|
+
const pubkeys = getPubkeysForIndices(state, indices);
|
|
1235
|
+
const decisionRoot = state.getShufflingDecisionRoot(epoch);
|
|
1247
1236
|
const shuffling = await chain.shufflingCache.get(epoch, decisionRoot);
|
|
1248
1237
|
if (!shuffling) {
|
|
1249
1238
|
throw new ApiError(
|
|
@@ -1264,7 +1253,7 @@ export function getValidatorApi(
|
|
|
1264
1253
|
}
|
|
1265
1254
|
}
|
|
1266
1255
|
|
|
1267
|
-
const dependentRoot =
|
|
1256
|
+
const dependentRoot = fromHex(state.getShufflingDecisionRoot(epoch)) || (await getGenesisBlockRoot(state));
|
|
1268
1257
|
|
|
1269
1258
|
return {
|
|
1270
1259
|
data: duties,
|
|
@@ -1294,6 +1283,9 @@ export function getValidatorApi(
|
|
|
1294
1283
|
if (indices.length === 0) {
|
|
1295
1284
|
throw new ApiError(400, "No validator to get attester duties");
|
|
1296
1285
|
}
|
|
1286
|
+
if (epoch < config.ALTAIR_FORK_EPOCH) {
|
|
1287
|
+
throw new ApiError(400, "Sync committee duties are not supported before Altair");
|
|
1288
|
+
}
|
|
1297
1289
|
|
|
1298
1290
|
// May request for an epoch that's in the future
|
|
1299
1291
|
await waitForNextClosestEpoch();
|
|
@@ -1303,11 +1295,14 @@ export function getValidatorApi(
|
|
|
1303
1295
|
// Note: does not support requesting past duties
|
|
1304
1296
|
const head = chain.forkChoice.getHead();
|
|
1305
1297
|
const state = chain.getHeadState();
|
|
1298
|
+
if (!isStatePostAltair(state)) {
|
|
1299
|
+
throw new ApiError(400, "Sync committee duties are not available before Altair");
|
|
1300
|
+
}
|
|
1306
1301
|
|
|
1307
1302
|
// Check that all validatorIndex belong to the state before calling getCommitteeAssignments()
|
|
1308
|
-
const pubkeys = getPubkeysForIndices(state
|
|
1303
|
+
const pubkeys = getPubkeysForIndices(state, indices);
|
|
1309
1304
|
// Ensures `epoch // EPOCHS_PER_SYNC_COMMITTEE_PERIOD <= current_epoch // EPOCHS_PER_SYNC_COMMITTEE_PERIOD + 1`
|
|
1310
|
-
const syncCommitteeCache = state.
|
|
1305
|
+
const syncCommitteeCache = state.getIndexedSyncCommitteeAtEpoch(epoch);
|
|
1311
1306
|
const validatorSyncCommitteeIndexMap = syncCommitteeCache.validatorIndexMap;
|
|
1312
1307
|
|
|
1313
1308
|
const duties: routes.validator.SyncDuty[] = [];
|
|
@@ -1605,7 +1600,7 @@ export function getValidatorApi(
|
|
|
1605
1600
|
const validatorIndex = chain.pubkeyCache.getIndex(pubkey);
|
|
1606
1601
|
if (validatorIndex === null) return false;
|
|
1607
1602
|
|
|
1608
|
-
const validator = headState.
|
|
1603
|
+
const validator = headState.getValidator(validatorIndex);
|
|
1609
1604
|
const status = getValidatorStatus(validator, currentEpoch);
|
|
1610
1605
|
return (
|
|
1611
1606
|
status === "active_exiting" ||
|
|
@@ -1647,7 +1642,7 @@ export function getValidatorApi(
|
|
|
1647
1642
|
throw Error("Cached block production result is not full block");
|
|
1648
1643
|
}
|
|
1649
1644
|
|
|
1650
|
-
const {executionPayload, executionRequests,
|
|
1645
|
+
const {executionPayload, executionRequests, payloadEnvelopeStateRoot} = produceResult as ProduceFullGloas;
|
|
1651
1646
|
|
|
1652
1647
|
const envelope: gloas.ExecutionPayloadEnvelope = {
|
|
1653
1648
|
payload: executionPayload,
|
|
@@ -1655,7 +1650,7 @@ export function getValidatorApi(
|
|
|
1655
1650
|
builderIndex: BUILDER_INDEX_SELF_BUILD,
|
|
1656
1651
|
beaconBlockRoot,
|
|
1657
1652
|
slot,
|
|
1658
|
-
stateRoot:
|
|
1653
|
+
stateRoot: payloadEnvelopeStateRoot,
|
|
1659
1654
|
};
|
|
1660
1655
|
|
|
1661
1656
|
logger.info("Produced execution payload envelope", {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {routes} from "@lodestar/api";
|
|
2
2
|
import {ATTESTATION_SUBNET_COUNT} from "@lodestar/params";
|
|
3
|
-
import {
|
|
3
|
+
import {IBeaconStateView, computeSlotsSinceEpochStart} from "@lodestar/state-transition";
|
|
4
4
|
import {BLSPubkey, CommitteeIndex, ProducedBlockSource, Slot, SubnetID, ValidatorIndex} from "@lodestar/types";
|
|
5
5
|
import {MAX_BUILDER_BOOST_FACTOR} from "@lodestar/validator";
|
|
6
6
|
import {BlockSelectionResult, BuilderBlockSelectionReason, EngineBlockSelectionReason} from "./index.js";
|
|
@@ -24,11 +24,8 @@ export function computeSubnetForCommitteesAtSlot(
|
|
|
24
24
|
* Note: This is the fastest way of getting compressed pubkeys.
|
|
25
25
|
* See benchmark -> packages/beacon-node/test/perf/api/impl/validator/attester.test.ts
|
|
26
26
|
*/
|
|
27
|
-
export function getPubkeysForIndices(
|
|
28
|
-
|
|
29
|
-
indexes: ValidatorIndex[]
|
|
30
|
-
): BLSPubkey[] {
|
|
31
|
-
const validatorsLen = validators.length; // Get once, it's expensive
|
|
27
|
+
export function getPubkeysForIndices(state: IBeaconStateView, indexes: ValidatorIndex[]): BLSPubkey[] {
|
|
28
|
+
const validatorsLen = state.validatorCount; // Get once, it's expensive
|
|
32
29
|
|
|
33
30
|
const pubkeys: BLSPubkey[] = [];
|
|
34
31
|
for (let i = 0, len = indexes.length; i < len; i++) {
|
|
@@ -38,7 +35,7 @@ export function getPubkeysForIndices(
|
|
|
38
35
|
}
|
|
39
36
|
|
|
40
37
|
// NOTE: This could be optimized further by traversing the tree optimally with .getNodes()
|
|
41
|
-
const validator =
|
|
38
|
+
const validator = state.getValidator(index);
|
|
42
39
|
pubkeys.push(validator.pubkey);
|
|
43
40
|
}
|
|
44
41
|
|
|
@@ -3,6 +3,7 @@ import {Logger, sleep} from "@lodestar/utils";
|
|
|
3
3
|
import {Metrics} from "../metrics/metrics.js";
|
|
4
4
|
import {DataColumnReconstructionCode, recoverDataColumnSidecars} from "../util/dataColumns.js";
|
|
5
5
|
import {BlockInputColumns} from "./blocks/blockInput/index.js";
|
|
6
|
+
import {PayloadEnvelopeInput} from "./blocks/payloadEnvelopeInput/index.js";
|
|
6
7
|
import {ChainEventEmitter} from "./emitter.js";
|
|
7
8
|
|
|
8
9
|
/**
|
|
@@ -53,25 +54,25 @@ export class ColumnReconstructionTracker {
|
|
|
53
54
|
this.maxDelayMs = this.config.getSlotComponentDurationMs(RECONSTRUCTION_DELAY_MAX_BPS);
|
|
54
55
|
}
|
|
55
56
|
|
|
56
|
-
triggerColumnReconstruction(
|
|
57
|
+
triggerColumnReconstruction(input: BlockInputColumns | PayloadEnvelopeInput): void {
|
|
57
58
|
if (this.running) {
|
|
58
59
|
return;
|
|
59
60
|
}
|
|
60
61
|
|
|
61
|
-
if (this.lastBlockRootHex ===
|
|
62
|
+
if (this.lastBlockRootHex === input.blockRootHex) {
|
|
62
63
|
return;
|
|
63
64
|
}
|
|
64
65
|
|
|
65
66
|
// We don't care about the outcome of this call,
|
|
66
67
|
// just that it has been triggered for this block root.
|
|
67
68
|
this.running = true;
|
|
68
|
-
this.lastBlockRootHex =
|
|
69
|
+
this.lastBlockRootHex = input.blockRootHex;
|
|
69
70
|
const delay = this.minDelayMs + Math.random() * (this.maxDelayMs - this.minDelayMs);
|
|
70
71
|
sleep(delay)
|
|
71
72
|
.then(() => {
|
|
72
|
-
const logCtx = {slot:
|
|
73
|
+
const logCtx = {slot: input.slot, root: input.blockRootHex};
|
|
73
74
|
this.logger.debug("Attempting data column sidecar reconstruction", logCtx);
|
|
74
|
-
recoverDataColumnSidecars(
|
|
75
|
+
recoverDataColumnSidecars(input, this.emitter, this.metrics)
|
|
75
76
|
.then((result) => {
|
|
76
77
|
this.metrics?.recoverDataColumnSidecars.reconstructionResult.inc({result});
|
|
77
78
|
this.logger.debug("Data column sidecar reconstruction complete", {...logCtx, result});
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
getDataColumnSidecarsFromExecution,
|
|
12
12
|
} from "../util/execution.js";
|
|
13
13
|
import {IBlockInput, isBlockInputBlobs} from "./blocks/blockInput/index.js";
|
|
14
|
+
import {PayloadEnvelopeInput} from "./blocks/payloadEnvelopeInput/index.js";
|
|
14
15
|
import {ChainEventEmitter} from "./emitter.js";
|
|
15
16
|
|
|
16
17
|
export type GetBlobsTrackerInit = {
|
|
@@ -43,22 +44,22 @@ export class GetBlobsTracker {
|
|
|
43
44
|
this.config = init.config;
|
|
44
45
|
}
|
|
45
46
|
|
|
46
|
-
triggerGetBlobs(
|
|
47
|
-
if (this.activeReconstructions.has(
|
|
47
|
+
triggerGetBlobs(input: IBlockInput | PayloadEnvelopeInput, onComplete?: () => void): void {
|
|
48
|
+
if (this.activeReconstructions.has(input.blockRootHex)) {
|
|
48
49
|
return;
|
|
49
50
|
}
|
|
50
51
|
|
|
51
|
-
if (isBlockInputBlobs(
|
|
52
|
+
if (!(input instanceof PayloadEnvelopeInput) && isBlockInputBlobs(input)) {
|
|
52
53
|
// there is not preallocation for blob sidecars like there is for columns sidecars so no need to
|
|
53
54
|
// store the index for the preallocated buffers
|
|
54
|
-
this.activeReconstructions.add(
|
|
55
|
+
this.activeReconstructions.add(input.blockRootHex);
|
|
55
56
|
callInNextEventLoop(() => {
|
|
56
|
-
const logCtx = {slot:
|
|
57
|
+
const logCtx = {slot: input.slot, root: input.blockRootHex};
|
|
57
58
|
this.logger.verbose("Trigger getBlobsV1 for block", logCtx);
|
|
58
|
-
getBlobSidecarsFromExecution(this.config, this.executionEngine, this.metrics, this.emitter,
|
|
59
|
+
getBlobSidecarsFromExecution(this.config, this.executionEngine, this.metrics, this.emitter, input).finally(
|
|
59
60
|
() => {
|
|
60
61
|
this.logger.verbose("Completed getBlobsV1 for block", logCtx);
|
|
61
|
-
this.activeReconstructions.delete(
|
|
62
|
+
this.activeReconstructions.delete(input.blockRootHex);
|
|
62
63
|
}
|
|
63
64
|
);
|
|
64
65
|
});
|
|
@@ -72,7 +73,7 @@ export class GetBlobsTracker {
|
|
|
72
73
|
this.blobsAndProofsBuffers[freeIndex] = {inUse: false, buffers: []};
|
|
73
74
|
}
|
|
74
75
|
|
|
75
|
-
const maxBlobs = this.config.getMaxBlobsPerBlock(computeEpochAtSlot(
|
|
76
|
+
const maxBlobs = this.config.getMaxBlobsPerBlock(computeEpochAtSlot(input.slot));
|
|
76
77
|
// double check that there is enough pre-allocated space (blob schedule may have changed since the last use)
|
|
77
78
|
const timer = this.metrics?.peerDas.getBlobsV2PreAllocationTime.startTimer();
|
|
78
79
|
for (let i = 0; i < maxBlobs; i++) {
|
|
@@ -84,22 +85,23 @@ export class GetBlobsTracker {
|
|
|
84
85
|
|
|
85
86
|
// We don't care about the outcome of this call,
|
|
86
87
|
// just that it has been triggered for this block root.
|
|
87
|
-
this.activeReconstructions.add(
|
|
88
|
+
this.activeReconstructions.add(input.blockRootHex);
|
|
88
89
|
this.blobsAndProofsBuffers[freeIndex].inUse = true;
|
|
89
90
|
callInNextEventLoop(() => {
|
|
90
|
-
const logCtx = {slot:
|
|
91
|
+
const logCtx = {slot: input.slot, root: input.blockRootHex};
|
|
91
92
|
this.logger.verbose("Trigger getBlobsV2 for block", logCtx);
|
|
92
93
|
getDataColumnSidecarsFromExecution(
|
|
93
94
|
this.config,
|
|
94
95
|
this.executionEngine,
|
|
95
96
|
this.emitter,
|
|
96
|
-
|
|
97
|
+
input,
|
|
97
98
|
this.metrics,
|
|
98
99
|
this.blobsAndProofsBuffers[freeIndex].buffers
|
|
99
100
|
)
|
|
100
101
|
.then((result) => {
|
|
101
102
|
this.logger.debug("getBlobsV2 result for block", {...logCtx, result});
|
|
102
103
|
this.metrics?.dataColumns.dataColumnEngineResult.inc({result});
|
|
104
|
+
onComplete?.();
|
|
103
105
|
})
|
|
104
106
|
.catch((error) => {
|
|
105
107
|
this.logger.debug("Error during getBlobsV2 for block", logCtx, error as Error);
|
|
@@ -107,7 +109,7 @@ export class GetBlobsTracker {
|
|
|
107
109
|
})
|
|
108
110
|
.finally(() => {
|
|
109
111
|
this.logger.verbose("Completed getBlobsV2 for block", logCtx);
|
|
110
|
-
this.activeReconstructions.delete(
|
|
112
|
+
this.activeReconstructions.delete(input.blockRootHex);
|
|
111
113
|
this.blobsAndProofsBuffers[freeIndex].inUse = false;
|
|
112
114
|
});
|
|
113
115
|
});
|
|
@@ -1,33 +1,15 @@
|
|
|
1
1
|
import {BeaconConfig} from "@lodestar/config";
|
|
2
2
|
import {
|
|
3
|
-
BeaconStateAllForks,
|
|
4
|
-
CachedBeaconStateAllForks,
|
|
5
3
|
DataAvailabilityStatus,
|
|
6
4
|
ExecutionPayloadStatus,
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
stateTransition,
|
|
5
|
+
IBeaconStateView,
|
|
6
|
+
createBeaconStateViewForHistoricalRegen,
|
|
10
7
|
} from "@lodestar/state-transition";
|
|
11
8
|
import {byteArrayEquals} from "@lodestar/utils";
|
|
12
9
|
import {IBeaconDb} from "../../../db/index.js";
|
|
13
|
-
import {getStateTypeFromBytes} from "../../../util/multifork.js";
|
|
14
10
|
import {HistoricalStateRegenMetrics} from "./metrics.js";
|
|
15
11
|
import {RegenErrorType} from "./types.js";
|
|
16
12
|
|
|
17
|
-
/**
|
|
18
|
-
* Populate a PubkeyCache with any new entries based on a BeaconState
|
|
19
|
-
*/
|
|
20
|
-
export function syncPubkeyCache(state: BeaconStateAllForks, pubkeyCache: PubkeyCache): void {
|
|
21
|
-
// Get the validators sub tree once for all the loop
|
|
22
|
-
const validators = state.validators;
|
|
23
|
-
|
|
24
|
-
const newCount = state.validators.length;
|
|
25
|
-
for (let i = pubkeyCache.size; i < newCount; i++) {
|
|
26
|
-
const pubkey = validators.getReadonly(i).pubkey;
|
|
27
|
-
pubkeyCache.set(i, pubkey);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
13
|
/**
|
|
32
14
|
* Get the nearest BeaconState at or before a slot
|
|
33
15
|
*/
|
|
@@ -35,27 +17,17 @@ export async function getNearestState(
|
|
|
35
17
|
slot: number,
|
|
36
18
|
config: BeaconConfig,
|
|
37
19
|
db: IBeaconDb,
|
|
38
|
-
|
|
39
|
-
): Promise<
|
|
20
|
+
nativeStateView: boolean
|
|
21
|
+
): Promise<IBeaconStateView> {
|
|
40
22
|
const stateBytesArr = await db.stateArchive.binaries({limit: 1, lte: slot, reverse: true});
|
|
41
23
|
if (!stateBytesArr.length) {
|
|
42
24
|
throw new Error("No near state found in the database");
|
|
43
25
|
}
|
|
44
26
|
|
|
45
27
|
const stateBytes = stateBytesArr[0];
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
return createCachedBeaconState(
|
|
50
|
-
state,
|
|
51
|
-
{
|
|
52
|
-
config,
|
|
53
|
-
pubkeyCache,
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
skipSyncPubkeys: true,
|
|
57
|
-
}
|
|
58
|
-
);
|
|
28
|
+
return nativeStateView
|
|
29
|
+
? createBeaconStateViewForHistoricalRegen({useNative: true, stateBytes})
|
|
30
|
+
: createBeaconStateViewForHistoricalRegen({useNative: false, config, stateBytes});
|
|
59
31
|
}
|
|
60
32
|
|
|
61
33
|
/**
|
|
@@ -65,13 +37,13 @@ export async function getHistoricalState(
|
|
|
65
37
|
slot: number,
|
|
66
38
|
config: BeaconConfig,
|
|
67
39
|
db: IBeaconDb,
|
|
68
|
-
|
|
40
|
+
nativeStateView: boolean,
|
|
69
41
|
metrics?: HistoricalStateRegenMetrics
|
|
70
42
|
): Promise<Uint8Array> {
|
|
71
43
|
const regenTimer = metrics?.regenTime.startTimer();
|
|
72
44
|
|
|
73
45
|
const loadStateTimer = metrics?.loadStateTime.startTimer();
|
|
74
|
-
let state = await getNearestState(slot, config, db,
|
|
46
|
+
let state = await getNearestState(slot, config, db, nativeStateView).catch((e) => {
|
|
75
47
|
metrics?.regenErrorCount.inc({reason: RegenErrorType.loadState});
|
|
76
48
|
throw e;
|
|
77
49
|
});
|
|
@@ -81,8 +53,7 @@ export async function getHistoricalState(
|
|
|
81
53
|
let blockCount = 0;
|
|
82
54
|
for await (const block of db.blockArchive.valuesStream({gt: state.slot, lte: slot})) {
|
|
83
55
|
try {
|
|
84
|
-
state = stateTransition(
|
|
85
|
-
state,
|
|
56
|
+
state = state.stateTransition(
|
|
86
57
|
block,
|
|
87
58
|
{
|
|
88
59
|
verifyProposer: false,
|
|
@@ -20,7 +20,7 @@ export class HistoricalStateRegen implements HistoricalStateWorkerApi {
|
|
|
20
20
|
private readonly api: ModuleThread<HistoricalStateWorkerApi>;
|
|
21
21
|
private readonly logger: LoggerNode;
|
|
22
22
|
|
|
23
|
-
constructor(modules: HistoricalStateRegenModules) {
|
|
23
|
+
private constructor(modules: HistoricalStateRegenModules) {
|
|
24
24
|
this.api = modules.api;
|
|
25
25
|
this.logger = modules.logger;
|
|
26
26
|
modules.signal?.addEventListener("abort", () => this.close(), {once: true});
|
|
@@ -35,6 +35,7 @@ export class HistoricalStateRegen implements HistoricalStateWorkerApi {
|
|
|
35
35
|
dbLocation: modules.opts.dbLocation,
|
|
36
36
|
metricsEnabled: Boolean(modules.metrics),
|
|
37
37
|
loggerOpts: modules.logger.toOpts(),
|
|
38
|
+
nativeStateView: modules.opts.nativeStateView,
|
|
38
39
|
};
|
|
39
40
|
|
|
40
41
|
const worker = new Worker(path.join(WORKER_DIR, "worker.js"), {
|
|
@@ -7,6 +7,7 @@ export type HistoricalStateRegenInitModules = {
|
|
|
7
7
|
opts: {
|
|
8
8
|
genesisTime: number;
|
|
9
9
|
dbLocation: string;
|
|
10
|
+
nativeStateView: boolean;
|
|
10
11
|
};
|
|
11
12
|
config: BeaconConfig;
|
|
12
13
|
logger: LoggerNode;
|
|
@@ -26,6 +27,7 @@ export type HistoricalStateWorkerData = {
|
|
|
26
27
|
dbLocation: string;
|
|
27
28
|
metricsEnabled: boolean;
|
|
28
29
|
loggerOpts: LoggerNodeOpts;
|
|
30
|
+
nativeStateView: boolean;
|
|
29
31
|
};
|
|
30
32
|
|
|
31
33
|
export type HistoricalStateWorkerApi = {
|
|
@@ -3,7 +3,6 @@ import {Transfer, expose} from "@chainsafe/threads/worker";
|
|
|
3
3
|
import {chainConfigFromJson, createBeaconConfig} from "@lodestar/config";
|
|
4
4
|
import {LevelDbController} from "@lodestar/db/controller/level";
|
|
5
5
|
import {getNodeLogger} from "@lodestar/logger/node";
|
|
6
|
-
import {createPubkeyCache} from "@lodestar/state-transition";
|
|
7
6
|
import {BeaconDb} from "../../../db/index.js";
|
|
8
7
|
import {RegistryMetricCreator, collectNodeJSMetrics} from "../../../metrics/index.js";
|
|
9
8
|
import {JobFnQueue} from "../../../util/queue/fnQueue.js";
|
|
@@ -52,8 +51,6 @@ const queue = new JobFnQueue(
|
|
|
52
51
|
queueMetrics
|
|
53
52
|
);
|
|
54
53
|
|
|
55
|
-
const pubkeyCache = createPubkeyCache();
|
|
56
|
-
|
|
57
54
|
const api: HistoricalStateWorkerApi = {
|
|
58
55
|
async close() {
|
|
59
56
|
abortController.abort();
|
|
@@ -65,7 +62,7 @@ const api: HistoricalStateWorkerApi = {
|
|
|
65
62
|
historicalStateRegenMetrics?.regenRequestCount.inc();
|
|
66
63
|
|
|
67
64
|
const stateBytes = await queue.push<Uint8Array>(() =>
|
|
68
|
-
getHistoricalState(slot, config, db,
|
|
65
|
+
getHistoricalState(slot, config, db, workerData.nativeStateView, historicalStateRegenMetrics)
|
|
69
66
|
);
|
|
70
67
|
const result = Transfer(stateBytes, [stateBytes.buffer]) as unknown as Uint8Array;
|
|
71
68
|
|
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
import {CheckpointWithHex} from "@lodestar/fork-choice";
|
|
2
|
-
import {
|
|
3
|
-
CachedBeaconStateAllForks,
|
|
4
|
-
EffectiveBalanceIncrements,
|
|
5
|
-
computeStartSlotAtEpoch,
|
|
6
|
-
getBlockRootAtSlot,
|
|
7
|
-
getEffectiveBalanceIncrementsZeroInactive,
|
|
8
|
-
} from "@lodestar/state-transition";
|
|
2
|
+
import {EffectiveBalanceIncrements, IBeaconStateView, computeStartSlotAtEpoch} from "@lodestar/state-transition";
|
|
9
3
|
import {Epoch, RootHex} from "@lodestar/types";
|
|
10
4
|
import {toRootHex} from "@lodestar/utils";
|
|
11
5
|
|
|
@@ -29,11 +23,11 @@ export class CheckpointBalancesCache {
|
|
|
29
23
|
* `state.current_epoch`. If there is not already some entry for the given block root, then
|
|
30
24
|
* add the effective balances from the `state` to the cache.
|
|
31
25
|
*/
|
|
32
|
-
processState(blockRootHex: RootHex, state:
|
|
33
|
-
const epoch = state.
|
|
26
|
+
processState(blockRootHex: RootHex, state: IBeaconStateView): void {
|
|
27
|
+
const epoch = state.epoch;
|
|
34
28
|
const epochBoundarySlot = computeStartSlotAtEpoch(epoch);
|
|
35
29
|
const epochBoundaryRoot =
|
|
36
|
-
epochBoundarySlot === state.slot ? blockRootHex : toRootHex(getBlockRootAtSlot(
|
|
30
|
+
epochBoundarySlot === state.slot ? blockRootHex : toRootHex(state.getBlockRootAtSlot(epochBoundarySlot));
|
|
37
31
|
|
|
38
32
|
const index = this.items.findIndex((item) => item.epoch === epoch && item.rootHex === epochBoundaryRoot);
|
|
39
33
|
if (index === -1) {
|
|
@@ -41,7 +35,7 @@ export class CheckpointBalancesCache {
|
|
|
41
35
|
this.items.shift();
|
|
42
36
|
}
|
|
43
37
|
// expect to reach this once per epoch
|
|
44
|
-
this.items.push({epoch, rootHex: epochBoundaryRoot, balances: getEffectiveBalanceIncrementsZeroInactive(
|
|
38
|
+
this.items.push({epoch, rootHex: epochBoundaryRoot, balances: state.getEffectiveBalanceIncrementsZeroInactive()});
|
|
45
39
|
}
|
|
46
40
|
}
|
|
47
41
|
|