@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
|
@@ -15,15 +15,14 @@ import {
|
|
|
15
15
|
isForkPostGloas,
|
|
16
16
|
} from "@lodestar/params";
|
|
17
17
|
import {
|
|
18
|
-
CachedBeaconStateAllForks,
|
|
19
|
-
CachedBeaconStateBellatrix,
|
|
20
|
-
CachedBeaconStateCapella,
|
|
21
|
-
CachedBeaconStateExecutions,
|
|
22
|
-
CachedBeaconStateGloas,
|
|
23
18
|
G2_POINT_AT_INFINITY,
|
|
19
|
+
IBeaconStateView,
|
|
20
|
+
type IBeaconStateViewBellatrix,
|
|
24
21
|
computeTimeAtSlot,
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
isParentBlockFull,
|
|
23
|
+
isStatePostBellatrix,
|
|
24
|
+
isStatePostCapella,
|
|
25
|
+
isStatePostGloas,
|
|
27
26
|
} from "@lodestar/state-transition";
|
|
28
27
|
import {
|
|
29
28
|
BLSPubkey,
|
|
@@ -113,11 +112,11 @@ export type ProduceFullGloas = {
|
|
|
113
112
|
blobsBundle: BlobsBundle<ForkPostGloas>;
|
|
114
113
|
cells: fulu.Cell[][];
|
|
115
114
|
/**
|
|
116
|
-
* Cached envelope state root computed during block production.
|
|
115
|
+
* Cached payload envelope state root computed during block production.
|
|
117
116
|
* This is the state root after running `processExecutionPayloadEnvelope` on the
|
|
118
117
|
* post-block state, and later used to construct the `ExecutionPayloadEnvelope`.
|
|
119
118
|
*/
|
|
120
|
-
|
|
119
|
+
payloadEnvelopeStateRoot: Root;
|
|
121
120
|
};
|
|
122
121
|
export type ProduceFullFulu = {
|
|
123
122
|
type: BlockType.Full;
|
|
@@ -161,7 +160,7 @@ export type ProduceResult =
|
|
|
161
160
|
export async function produceBlockBody<T extends BlockType>(
|
|
162
161
|
this: BeaconChain,
|
|
163
162
|
blockType: T,
|
|
164
|
-
currentState:
|
|
163
|
+
currentState: IBeaconStateView,
|
|
165
164
|
blockAttr: BlockAttributes & {
|
|
166
165
|
proposerIndex: ValidatorIndex;
|
|
167
166
|
proposerPubKey: BLSPubkey;
|
|
@@ -201,10 +200,13 @@ export async function produceBlockBody<T extends BlockType>(
|
|
|
201
200
|
this.logger.verbose("Producing beacon block body", logMeta);
|
|
202
201
|
|
|
203
202
|
if (isForkPostGloas(fork)) {
|
|
203
|
+
if (!isStatePostGloas(currentState)) {
|
|
204
|
+
throw new Error("Expected Gloas state for Gloas block production");
|
|
205
|
+
}
|
|
206
|
+
|
|
204
207
|
// TODO GLOAS: support non self-building here, the block type differentiation between
|
|
205
208
|
// full and blinded no longer makes sense in gloas, it might be a good idea to move
|
|
206
209
|
// this into a completely separate function and have pre/post gloas more separated
|
|
207
|
-
const gloasState = currentState as CachedBeaconStateGloas;
|
|
208
210
|
const safeBlockHash = getSafeExecutionBlockHash(this.forkChoice);
|
|
209
211
|
const finalizedBlockHash = this.forkChoice.getFinalizedBlock().executionPayloadBlockHash ?? ZERO_HASH_HEX;
|
|
210
212
|
const feeRecipient = requestedFeeRecipient ?? this.beaconProposerCache.getOrDefault(proposerIndex);
|
|
@@ -225,7 +227,7 @@ export async function produceBlockBody<T extends BlockType>(
|
|
|
225
227
|
parentBlockRoot,
|
|
226
228
|
safeBlockHash,
|
|
227
229
|
finalizedBlockHash ?? ZERO_HASH_HEX,
|
|
228
|
-
|
|
230
|
+
currentState,
|
|
229
231
|
feeRecipient
|
|
230
232
|
);
|
|
231
233
|
|
|
@@ -259,10 +261,10 @@ export async function produceBlockBody<T extends BlockType>(
|
|
|
259
261
|
|
|
260
262
|
// Create self-build execution payload bid
|
|
261
263
|
const bid: gloas.ExecutionPayloadBid = {
|
|
262
|
-
parentBlockHash:
|
|
264
|
+
parentBlockHash: currentState.latestBlockHash,
|
|
263
265
|
parentBlockRoot: parentBlockRoot,
|
|
264
266
|
blockHash: executionPayload.blockHash,
|
|
265
|
-
prevRandao: getRandaoMix(
|
|
267
|
+
prevRandao: currentState.getRandaoMix(currentState.epoch),
|
|
266
268
|
feeRecipient: executionPayload.feeRecipient,
|
|
267
269
|
gasLimit: BigInt(executionPayload.gasLimit),
|
|
268
270
|
builderIndex: BUILDER_INDEX_SELF_BUILD,
|
|
@@ -308,6 +310,10 @@ export async function produceBlockBody<T extends BlockType>(
|
|
|
308
310
|
shouldOverrideBuilder,
|
|
309
311
|
});
|
|
310
312
|
} else if (isForkPostBellatrix(fork)) {
|
|
313
|
+
if (!isStatePostBellatrix(currentState)) {
|
|
314
|
+
throw new Error("Expected Bellatrix state for execution block production");
|
|
315
|
+
}
|
|
316
|
+
|
|
311
317
|
const safeBlockHash = getSafeExecutionBlockHash(this.forkChoice);
|
|
312
318
|
const finalizedBlockHash = this.forkChoice.getFinalizedBlock().executionPayloadBlockHash ?? ZERO_HASH_HEX;
|
|
313
319
|
const feeRecipient = requestedFeeRecipient ?? this.beaconProposerCache.getOrDefault(proposerIndex);
|
|
@@ -336,7 +342,7 @@ export async function produceBlockBody<T extends BlockType>(
|
|
|
336
342
|
parentBlockRoot,
|
|
337
343
|
safeBlockHash,
|
|
338
344
|
finalizedBlockHash ?? ZERO_HASH_HEX,
|
|
339
|
-
currentState
|
|
345
|
+
currentState,
|
|
340
346
|
executionBuilder.issueLocalFcUWithFeeRecipient
|
|
341
347
|
);
|
|
342
348
|
}
|
|
@@ -348,12 +354,7 @@ export async function produceBlockBody<T extends BlockType>(
|
|
|
348
354
|
slot: blockSlot,
|
|
349
355
|
proposerPubKey: toHex(proposerPubKey),
|
|
350
356
|
});
|
|
351
|
-
const headerRes = await prepareExecutionPayloadHeader(
|
|
352
|
-
this,
|
|
353
|
-
fork,
|
|
354
|
-
currentState as CachedBeaconStateBellatrix,
|
|
355
|
-
proposerPubKey
|
|
356
|
-
);
|
|
357
|
+
const headerRes = await prepareExecutionPayloadHeader(this, fork, currentState, proposerPubKey);
|
|
357
358
|
|
|
358
359
|
endExecutionPayloadHeader?.({
|
|
359
360
|
step: BlockProductionStep.executionPayload,
|
|
@@ -388,7 +389,7 @@ export async function produceBlockBody<T extends BlockType>(
|
|
|
388
389
|
});
|
|
389
390
|
} else {
|
|
390
391
|
const headerGasLimit = builderRes.header.gasLimit;
|
|
391
|
-
const parentGasLimit =
|
|
392
|
+
const parentGasLimit = currentState.latestExecutionPayloadHeader.gasLimit;
|
|
392
393
|
const expectedGasLimit = getExpectedGasLimit(parentGasLimit, targetGasLimit);
|
|
393
394
|
|
|
394
395
|
const lowerBound = Math.min(parentGasLimit, expectedGasLimit);
|
|
@@ -449,7 +450,7 @@ export async function produceBlockBody<T extends BlockType>(
|
|
|
449
450
|
parentBlockRoot,
|
|
450
451
|
safeBlockHash,
|
|
451
452
|
finalizedBlockHash ?? ZERO_HASH_HEX,
|
|
452
|
-
currentState
|
|
453
|
+
currentState,
|
|
453
454
|
feeRecipient
|
|
454
455
|
);
|
|
455
456
|
|
|
@@ -614,14 +615,12 @@ export async function prepareExecutionPayload(
|
|
|
614
615
|
parentBlockRoot: Root,
|
|
615
616
|
safeBlockHash: RootHex,
|
|
616
617
|
finalizedBlockHash: RootHex,
|
|
617
|
-
state:
|
|
618
|
+
state: IBeaconStateViewBellatrix,
|
|
618
619
|
suggestedFeeRecipient: string
|
|
619
620
|
): Promise<{prepType: PayloadPreparationType; payloadId: PayloadId}> {
|
|
620
|
-
const parentHash =
|
|
621
|
-
? (state as CachedBeaconStateGloas).latestBlockHash
|
|
622
|
-
: (state as CachedBeaconStateExecutions).latestExecutionPayloadHeader.blockHash;
|
|
621
|
+
const parentHash = state.latestBlockHash;
|
|
623
622
|
const timestamp = computeTimeAtSlot(chain.config, state.slot, state.genesisTime);
|
|
624
|
-
const prevRandao = getRandaoMix(state
|
|
623
|
+
const prevRandao = state.getRandaoMix(state.epoch);
|
|
625
624
|
|
|
626
625
|
const payloadIdCached = chain.executionEngine.payloadIdCache.get({
|
|
627
626
|
headBlockHash: toRootHex(parentHash),
|
|
@@ -684,7 +683,7 @@ async function prepareExecutionPayloadHeader(
|
|
|
684
683
|
config: ChainForkConfig;
|
|
685
684
|
},
|
|
686
685
|
fork: ForkPostBellatrix,
|
|
687
|
-
state:
|
|
686
|
+
state: IBeaconStateViewBellatrix,
|
|
688
687
|
proposerPubKey: BLSPubkey
|
|
689
688
|
): Promise<{
|
|
690
689
|
header: ExecutionPayloadHeader;
|
|
@@ -711,16 +710,9 @@ export function getPayloadAttributesForSSE(
|
|
|
711
710
|
prepareSlot,
|
|
712
711
|
parentBlockRoot,
|
|
713
712
|
feeRecipient,
|
|
714
|
-
}: {
|
|
715
|
-
prepareState: CachedBeaconStateExecutions | CachedBeaconStateGloas;
|
|
716
|
-
prepareSlot: Slot;
|
|
717
|
-
parentBlockRoot: Root;
|
|
718
|
-
feeRecipient: string;
|
|
719
|
-
}
|
|
713
|
+
}: {prepareState: IBeaconStateViewBellatrix; prepareSlot: Slot; parentBlockRoot: Root; feeRecipient: string}
|
|
720
714
|
): SSEPayloadAttributes {
|
|
721
|
-
const parentHash =
|
|
722
|
-
? (prepareState as CachedBeaconStateGloas).latestBlockHash
|
|
723
|
-
: (prepareState as CachedBeaconStateExecutions).latestExecutionPayloadHeader.blockHash;
|
|
715
|
+
const parentHash = prepareState.latestBlockHash;
|
|
724
716
|
const payloadAttributes = preparePayloadAttributes(fork, chain, {
|
|
725
717
|
prepareState,
|
|
726
718
|
prepareSlot,
|
|
@@ -736,11 +728,11 @@ export function getPayloadAttributesForSSE(
|
|
|
736
728
|
}
|
|
737
729
|
parentBlockNumber = parentBlock.executionPayloadNumber;
|
|
738
730
|
} else {
|
|
739
|
-
parentBlockNumber =
|
|
731
|
+
parentBlockNumber = prepareState.payloadBlockNumber;
|
|
740
732
|
}
|
|
741
733
|
|
|
742
734
|
const ssePayloadAttributes: SSEPayloadAttributes = {
|
|
743
|
-
proposerIndex: prepareState.
|
|
735
|
+
proposerIndex: prepareState.getBeaconProposer(prepareSlot),
|
|
744
736
|
proposalSlot: prepareSlot,
|
|
745
737
|
parentBlockNumber,
|
|
746
738
|
parentBlockRoot,
|
|
@@ -761,14 +753,14 @@ function preparePayloadAttributes(
|
|
|
761
753
|
parentBlockRoot,
|
|
762
754
|
feeRecipient,
|
|
763
755
|
}: {
|
|
764
|
-
prepareState:
|
|
756
|
+
prepareState: IBeaconStateViewBellatrix;
|
|
765
757
|
prepareSlot: Slot;
|
|
766
758
|
parentBlockRoot: Root;
|
|
767
759
|
feeRecipient: string;
|
|
768
760
|
}
|
|
769
761
|
): SSEPayloadAttributes["payloadAttributes"] {
|
|
770
762
|
const timestamp = computeTimeAtSlot(chain.config, prepareSlot, prepareState.genesisTime);
|
|
771
|
-
const prevRandao = getRandaoMix(prepareState
|
|
763
|
+
const prevRandao = prepareState.getRandaoMix(prepareState.epoch);
|
|
772
764
|
const payloadAttributes = {
|
|
773
765
|
timestamp,
|
|
774
766
|
prevRandao,
|
|
@@ -776,11 +768,22 @@ function preparePayloadAttributes(
|
|
|
776
768
|
};
|
|
777
769
|
|
|
778
770
|
if (ForkSeq[fork] >= ForkSeq.capella) {
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
)
|
|
771
|
+
if (!isStatePostCapella(prepareState)) {
|
|
772
|
+
throw new Error("Expected Capella state for withdrawals");
|
|
773
|
+
}
|
|
774
|
+
|
|
775
|
+
if (isStatePostGloas(prepareState) && !isParentBlockFull(prepareState)) {
|
|
776
|
+
// When the parent block is empty, state.payloadExpectedWithdrawals holds a batch
|
|
777
|
+
// already deducted from CL balances but never credited on the EL (the envelope
|
|
778
|
+
// was not delivered). The next payload must carry those same withdrawals to
|
|
779
|
+
// restore CL/EL consistency, otherwise validators permanently lose that balance.
|
|
780
|
+
(payloadAttributes as capella.SSEPayloadAttributes["payloadAttributes"]).withdrawals =
|
|
781
|
+
prepareState.payloadExpectedWithdrawals;
|
|
782
|
+
} else {
|
|
783
|
+
// withdrawals logic is now fork aware as it changes on electra fork post capella
|
|
784
|
+
(payloadAttributes as capella.SSEPayloadAttributes["payloadAttributes"]).withdrawals =
|
|
785
|
+
prepareState.getExpectedWithdrawals().expectedWithdrawals;
|
|
786
|
+
}
|
|
784
787
|
}
|
|
785
788
|
|
|
786
789
|
if (ForkSeq[fork] >= ForkSeq.deneb) {
|
|
@@ -793,7 +796,7 @@ function preparePayloadAttributes(
|
|
|
793
796
|
export async function produceCommonBlockBody<T extends BlockType>(
|
|
794
797
|
this: BeaconChain,
|
|
795
798
|
blockType: T,
|
|
796
|
-
currentState:
|
|
799
|
+
currentState: IBeaconStateView,
|
|
797
800
|
{randaoReveal, graffiti, slot, parentBlock}: BlockAttributes
|
|
798
801
|
): Promise<CommonBlockBody> {
|
|
799
802
|
const stepsMetrics =
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {routes} from "@lodestar/api";
|
|
2
2
|
import {ProtoBlock} from "@lodestar/fork-choice";
|
|
3
|
-
import {
|
|
3
|
+
import {IBeaconStateView} from "@lodestar/state-transition";
|
|
4
4
|
import {BeaconBlock, Epoch, RootHex, Slot, phase0} from "@lodestar/types";
|
|
5
5
|
import {CheckpointHexPayload} from "../stateCache/types.js";
|
|
6
6
|
|
|
@@ -9,8 +9,10 @@ export enum RegenCaller {
|
|
|
9
9
|
processBlock = "processBlock",
|
|
10
10
|
produceBlock = "produceBlock",
|
|
11
11
|
validateGossipBlock = "validateGossipBlock",
|
|
12
|
+
validateGossipPayloadEnvelope = "validateGossipPayloadEnvelope",
|
|
12
13
|
validateGossipBlob = "validateGossipBlob",
|
|
13
14
|
validateGossipDataColumn = "validateGossipDataColumn",
|
|
15
|
+
validateGossipExecutionPayloadEnvelope = "validateGossipExecutionPayloadEnvelope",
|
|
14
16
|
precomputeEpoch = "precomputeEpoch",
|
|
15
17
|
predictProposerHead = "predictProposerHead",
|
|
16
18
|
produceAttestationData = "produceAttestationData",
|
|
@@ -36,21 +38,21 @@ export type StateRegenerationOpts = {
|
|
|
36
38
|
export interface IStateRegenerator extends IStateRegeneratorInternal {
|
|
37
39
|
dropCache(): void;
|
|
38
40
|
dumpCacheSummary(): routes.lodestar.StateCacheItem[];
|
|
39
|
-
getStateSync(stateRoot: RootHex):
|
|
40
|
-
getPreStateSync(block: BeaconBlock):
|
|
41
|
-
getCheckpointStateOrBytes(cp: CheckpointHexPayload): Promise<
|
|
42
|
-
getCheckpointStateSync(cp: CheckpointHexPayload):
|
|
43
|
-
getClosestHeadState(head: ProtoBlock):
|
|
41
|
+
getStateSync(stateRoot: RootHex): IBeaconStateView | null;
|
|
42
|
+
getPreStateSync(block: BeaconBlock): IBeaconStateView | null;
|
|
43
|
+
getCheckpointStateOrBytes(cp: CheckpointHexPayload): Promise<IBeaconStateView | Uint8Array | null>;
|
|
44
|
+
getCheckpointStateSync(cp: CheckpointHexPayload): IBeaconStateView | null;
|
|
45
|
+
getClosestHeadState(head: ProtoBlock): IBeaconStateView | null;
|
|
44
46
|
pruneOnCheckpoint(finalizedEpoch: Epoch, justifiedEpoch: Epoch, headStateRoot: RootHex): void;
|
|
45
47
|
pruneOnFinalized(finalizedEpoch: Epoch): void;
|
|
46
|
-
processBlockState(blockRootHex: RootHex, postState:
|
|
47
|
-
processPayloadState(payloadState:
|
|
48
|
+
processBlockState(blockRootHex: RootHex, postState: IBeaconStateView): void;
|
|
49
|
+
processPayloadState(payloadState: IBeaconStateView): void;
|
|
48
50
|
/**
|
|
49
51
|
* payloadPresent is true if this is payload state, false if block state.
|
|
50
52
|
* payloadPresent is always true for pre-gloas.
|
|
51
53
|
*/
|
|
52
|
-
addCheckpointState(cp: phase0.Checkpoint, item:
|
|
53
|
-
updateHeadState(newHead: ProtoBlock, maybeHeadState:
|
|
54
|
+
addCheckpointState(cp: phase0.Checkpoint, item: IBeaconStateView, payloadPresent: boolean): void;
|
|
55
|
+
updateHeadState(newHead: ProtoBlock, maybeHeadState: IBeaconStateView): void;
|
|
54
56
|
updatePreComputedCheckpoint(rootHex: RootHex, epoch: Epoch, payloadPresent: boolean): number | null;
|
|
55
57
|
upgradeForGloas(epoch: Epoch): void;
|
|
56
58
|
}
|
|
@@ -63,11 +65,7 @@ export interface IStateRegeneratorInternal {
|
|
|
63
65
|
* Return a valid pre-state for a beacon block
|
|
64
66
|
* This will always return a state in the latest viable epoch
|
|
65
67
|
*/
|
|
66
|
-
getPreState(
|
|
67
|
-
block: BeaconBlock,
|
|
68
|
-
opts: StateRegenerationOpts,
|
|
69
|
-
rCaller: RegenCaller
|
|
70
|
-
): Promise<CachedBeaconStateAllForks>;
|
|
68
|
+
getPreState(block: BeaconBlock, opts: StateRegenerationOpts, rCaller: RegenCaller): Promise<IBeaconStateView>;
|
|
71
69
|
|
|
72
70
|
/**
|
|
73
71
|
* Return the state of `blockRoot` processed to slot `slot`
|
|
@@ -77,10 +75,10 @@ export interface IStateRegeneratorInternal {
|
|
|
77
75
|
slot: Slot,
|
|
78
76
|
opts: StateRegenerationOpts,
|
|
79
77
|
rCaller: RegenCaller
|
|
80
|
-
): Promise<
|
|
78
|
+
): Promise<IBeaconStateView>;
|
|
81
79
|
|
|
82
80
|
/**
|
|
83
81
|
* Return the exact state with `stateRoot`
|
|
84
82
|
*/
|
|
85
|
-
getState(stateRoot: RootHex, rCaller: RegenCaller): Promise<
|
|
83
|
+
getState(stateRoot: RootHex, rCaller: RegenCaller): Promise<IBeaconStateView>;
|
|
86
84
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {routes} from "@lodestar/api";
|
|
2
2
|
import {IForkChoice, PayloadStatus, ProtoBlock} from "@lodestar/fork-choice";
|
|
3
|
-
import {
|
|
3
|
+
import {IBeaconStateView, computeEpochAtSlot} from "@lodestar/state-transition";
|
|
4
4
|
import {BeaconBlock, Epoch, RootHex, Slot, isGloasBeaconBlock, phase0} from "@lodestar/types";
|
|
5
5
|
import {Logger, fromHex, toRootHex} from "@lodestar/utils";
|
|
6
6
|
import {Metrics} from "../../metrics/index.js";
|
|
@@ -34,7 +34,7 @@ export type RegenRequest = RegenRequestByKey[RegenRequestKey];
|
|
|
34
34
|
* All requests are queued so that only a single state at a time may be regenerated at a time
|
|
35
35
|
*/
|
|
36
36
|
export class QueuedStateRegenerator implements IStateRegenerator {
|
|
37
|
-
readonly jobQueue: JobItemQueue<[RegenRequest],
|
|
37
|
+
readonly jobQueue: JobItemQueue<[RegenRequest], IBeaconStateView>;
|
|
38
38
|
private readonly regen: StateRegenerator;
|
|
39
39
|
|
|
40
40
|
private readonly forkChoice: IForkChoice;
|
|
@@ -45,7 +45,7 @@ export class QueuedStateRegenerator implements IStateRegenerator {
|
|
|
45
45
|
|
|
46
46
|
constructor(modules: QueuedStateRegeneratorModules) {
|
|
47
47
|
this.regen = new StateRegenerator(modules);
|
|
48
|
-
this.jobQueue = new JobItemQueue<[RegenRequest],
|
|
48
|
+
this.jobQueue = new JobItemQueue<[RegenRequest], IBeaconStateView>(
|
|
49
49
|
this.jobQueueProcessor,
|
|
50
50
|
{maxLength: REGEN_QUEUE_MAX_LEN, signal: modules.signal},
|
|
51
51
|
modules.metrics ? modules.metrics.regenQueue : undefined
|
|
@@ -79,14 +79,14 @@ export class QueuedStateRegenerator implements IStateRegenerator {
|
|
|
79
79
|
/**
|
|
80
80
|
* Get a state from block state cache.
|
|
81
81
|
*/
|
|
82
|
-
getStateSync(stateRoot: RootHex):
|
|
82
|
+
getStateSync(stateRoot: RootHex): IBeaconStateView | null {
|
|
83
83
|
return this.blockStateCache.get(stateRoot);
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
/**
|
|
87
87
|
* Get state for block processing.
|
|
88
88
|
*/
|
|
89
|
-
getPreStateSync(block: BeaconBlock):
|
|
89
|
+
getPreStateSync(block: BeaconBlock): IBeaconStateView | null {
|
|
90
90
|
const parentRoot = toRootHex(block.parentRoot);
|
|
91
91
|
const parentBlock = isGloasBeaconBlock(block)
|
|
92
92
|
? this.forkChoice.getBlockHexAndBlockHash(
|
|
@@ -135,21 +135,21 @@ export class QueuedStateRegenerator implements IStateRegenerator {
|
|
|
135
135
|
return null;
|
|
136
136
|
}
|
|
137
137
|
|
|
138
|
-
async getCheckpointStateOrBytes(cp: CheckpointHexPayload): Promise<
|
|
138
|
+
async getCheckpointStateOrBytes(cp: CheckpointHexPayload): Promise<IBeaconStateView | Uint8Array | null> {
|
|
139
139
|
return this.checkpointStateCache.getStateOrBytes(cp);
|
|
140
140
|
}
|
|
141
141
|
|
|
142
142
|
/**
|
|
143
143
|
* Get checkpoint state from cache
|
|
144
144
|
*/
|
|
145
|
-
getCheckpointStateSync(cp: CheckpointHexPayload):
|
|
145
|
+
getCheckpointStateSync(cp: CheckpointHexPayload): IBeaconStateView | null {
|
|
146
146
|
return this.checkpointStateCache.get(cp);
|
|
147
147
|
}
|
|
148
148
|
|
|
149
149
|
/**
|
|
150
150
|
* Get state closest to head
|
|
151
151
|
*/
|
|
152
|
-
getClosestHeadState(head: ProtoBlock):
|
|
152
|
+
getClosestHeadState(head: ProtoBlock): IBeaconStateView | null {
|
|
153
153
|
// Convert PayloadStatus to payloadPresent boolean
|
|
154
154
|
if (head.payloadStatus === PayloadStatus.PENDING) {
|
|
155
155
|
throw new RegenError({
|
|
@@ -175,7 +175,7 @@ export class QueuedStateRegenerator implements IStateRegenerator {
|
|
|
175
175
|
this.blockStateCache.deleteAllBeforeEpoch(finalizedEpoch);
|
|
176
176
|
}
|
|
177
177
|
|
|
178
|
-
processBlockState(blockRootHex: RootHex, postState:
|
|
178
|
+
processBlockState(blockRootHex: RootHex, postState: IBeaconStateView): void {
|
|
179
179
|
this.blockStateCache.add(postState);
|
|
180
180
|
this.checkpointStateCache.processState(blockRootHex, postState).catch((e) => {
|
|
181
181
|
this.logger.debug("Error processing block state", {blockRootHex, slot: postState.slot}, e);
|
|
@@ -185,17 +185,17 @@ export class QueuedStateRegenerator implements IStateRegenerator {
|
|
|
185
185
|
/**
|
|
186
186
|
* Process payload state for caching after importing execution payload.
|
|
187
187
|
*/
|
|
188
|
-
processPayloadState(payloadState:
|
|
188
|
+
processPayloadState(payloadState: IBeaconStateView): void {
|
|
189
189
|
// Add payload state to block state cache (keyed by payload state root)
|
|
190
190
|
this.blockStateCache.add(payloadState);
|
|
191
191
|
}
|
|
192
192
|
|
|
193
193
|
// TODO GLOAS: This should also be called when importing execution payload after we implement it
|
|
194
|
-
addCheckpointState(cp: phase0.Checkpoint, item:
|
|
194
|
+
addCheckpointState(cp: phase0.Checkpoint, item: IBeaconStateView, payloadPresent: boolean): void {
|
|
195
195
|
this.checkpointStateCache.add(cp, item, payloadPresent);
|
|
196
196
|
}
|
|
197
197
|
|
|
198
|
-
updateHeadState(newHead: ProtoBlock, maybeHeadState:
|
|
198
|
+
updateHeadState(newHead: ProtoBlock, maybeHeadState: IBeaconStateView): void {
|
|
199
199
|
const {stateRoot: newHeadStateRoot, blockRoot: newHeadBlockRoot, slot: newHeadSlot} = newHead;
|
|
200
200
|
const maybeHeadStateRoot = toRootHex(maybeHeadState.hashTreeRoot());
|
|
201
201
|
const logCtx = {
|
|
@@ -241,11 +241,7 @@ export class QueuedStateRegenerator implements IStateRegenerator {
|
|
|
241
241
|
* Get the state to run with `block`.
|
|
242
242
|
* - State after `block.parentRoot` dialed forward to block.slot
|
|
243
243
|
*/
|
|
244
|
-
async getPreState(
|
|
245
|
-
block: BeaconBlock,
|
|
246
|
-
opts: StateRegenerationOpts,
|
|
247
|
-
rCaller: RegenCaller
|
|
248
|
-
): Promise<CachedBeaconStateAllForks> {
|
|
244
|
+
async getPreState(block: BeaconBlock, opts: StateRegenerationOpts, rCaller: RegenCaller): Promise<IBeaconStateView> {
|
|
249
245
|
this.metrics?.regenFnCallTotal.inc({caller: rCaller, entrypoint: RegenFnName.getPreState});
|
|
250
246
|
|
|
251
247
|
// First attempt to fetch the state from caches before queueing
|
|
@@ -271,14 +267,14 @@ export class QueuedStateRegenerator implements IStateRegenerator {
|
|
|
271
267
|
slot: Slot,
|
|
272
268
|
opts: StateRegenerationOpts,
|
|
273
269
|
rCaller: RegenCaller
|
|
274
|
-
): Promise<
|
|
270
|
+
): Promise<IBeaconStateView> {
|
|
275
271
|
this.metrics?.regenFnCallTotal.inc({caller: rCaller, entrypoint: RegenFnName.getBlockSlotState});
|
|
276
272
|
|
|
277
273
|
// The state is not immediately available in the caches, enqueue the job
|
|
278
274
|
return this.jobQueue.push({key: "getBlockSlotState", args: [block, slot, opts, rCaller]});
|
|
279
275
|
}
|
|
280
276
|
|
|
281
|
-
async getState(stateRoot: RootHex, rCaller: RegenCaller): Promise<
|
|
277
|
+
async getState(stateRoot: RootHex, rCaller: RegenCaller): Promise<IBeaconStateView> {
|
|
282
278
|
this.metrics?.regenFnCallTotal.inc({caller: rCaller, entrypoint: RegenFnName.getState});
|
|
283
279
|
|
|
284
280
|
// First attempt to fetch the state from cache before queueing
|
|
@@ -292,7 +288,7 @@ export class QueuedStateRegenerator implements IStateRegenerator {
|
|
|
292
288
|
return this.jobQueue.push({key: "getState", args: [stateRoot, rCaller]});
|
|
293
289
|
}
|
|
294
290
|
|
|
295
|
-
private jobQueueProcessor = async (regenRequest: RegenRequest): Promise<
|
|
291
|
+
private jobQueueProcessor = async (regenRequest: RegenRequest): Promise<IBeaconStateView> => {
|
|
296
292
|
const metricsLabels = {
|
|
297
293
|
caller: regenRequest.args.at(-1) as RegenCaller,
|
|
298
294
|
entrypoint: regenRequest.key as RegenFnName,
|
package/src/chain/regen/regen.ts
CHANGED
|
@@ -2,14 +2,12 @@ import {ChainForkConfig} from "@lodestar/config";
|
|
|
2
2
|
import {IForkChoice, PayloadStatus, ProtoBlock} from "@lodestar/fork-choice";
|
|
3
3
|
import {ForkSeq, SLOTS_PER_EPOCH} from "@lodestar/params";
|
|
4
4
|
import {
|
|
5
|
-
CachedBeaconStateAllForks,
|
|
6
5
|
DataAvailabilityStatus,
|
|
7
6
|
ExecutionPayloadStatus,
|
|
7
|
+
IBeaconStateView,
|
|
8
8
|
StateHashTreeRootSource,
|
|
9
9
|
computeEpochAtSlot,
|
|
10
10
|
computeStartSlotAtEpoch,
|
|
11
|
-
processSlots,
|
|
12
|
-
stateTransition,
|
|
13
11
|
} from "@lodestar/state-transition";
|
|
14
12
|
import {BeaconBlock, RootHex, SignedBeaconBlock, Slot, isGloasBeaconBlock} from "@lodestar/types";
|
|
15
13
|
import {Logger, fromHex, toRootHex} from "@lodestar/utils";
|
|
@@ -57,7 +55,7 @@ export class StateRegenerator implements IStateRegeneratorInternal {
|
|
|
57
55
|
block: BeaconBlock,
|
|
58
56
|
opts: StateRegenerationOpts,
|
|
59
57
|
regenCaller: RegenCaller
|
|
60
|
-
): Promise<
|
|
58
|
+
): Promise<IBeaconStateView> {
|
|
61
59
|
const parentRoot = toRootHex(block.parentRoot);
|
|
62
60
|
const parentBlock = isGloasBeaconBlock(block)
|
|
63
61
|
? this.modules.forkChoice.getBlockHexAndBlockHash(
|
|
@@ -99,7 +97,7 @@ export class StateRegenerator implements IStateRegeneratorInternal {
|
|
|
99
97
|
opts: StateRegenerationOpts,
|
|
100
98
|
regenCaller: RegenCaller,
|
|
101
99
|
allowDiskReload = false
|
|
102
|
-
): Promise<
|
|
100
|
+
): Promise<IBeaconStateView> {
|
|
103
101
|
if (slot < block.slot) {
|
|
104
102
|
throw new RegenError({
|
|
105
103
|
code: RegenErrorCode.SLOT_BEFORE_BLOCK_SLOT,
|
|
@@ -149,7 +147,7 @@ export class StateRegenerator implements IStateRegeneratorInternal {
|
|
|
149
147
|
caller: RegenCaller,
|
|
150
148
|
// internal option, don't want to expose to external caller
|
|
151
149
|
allowDiskReload = false
|
|
152
|
-
): Promise<
|
|
150
|
+
): Promise<IBeaconStateView> {
|
|
153
151
|
// Trivial case, state at stateRoot is already cached
|
|
154
152
|
const cachedStateCtx = this.modules.blockStateCache.get(stateRoot);
|
|
155
153
|
if (cachedStateCtx) {
|
|
@@ -164,7 +162,7 @@ export class StateRegenerator implements IStateRegeneratorInternal {
|
|
|
164
162
|
// blocks to replay, ordered highest to lowest
|
|
165
163
|
// gets reversed when replayed
|
|
166
164
|
const blocksToReplay = [block];
|
|
167
|
-
let state:
|
|
165
|
+
let state: IBeaconStateView | null = null;
|
|
168
166
|
const {checkpointStateCache} = this.modules;
|
|
169
167
|
|
|
170
168
|
const getSeedStateTimer = this.modules.metrics?.regenGetState.getSeedState.startTimer({caller});
|
|
@@ -260,8 +258,7 @@ export class StateRegenerator implements IStateRegeneratorInternal {
|
|
|
260
258
|
// Only advances state trusting block's signture and hashes.
|
|
261
259
|
// We are only running the state transition to get a specific state's data.
|
|
262
260
|
// stateTransition() does the clone() inside, transfer cache to make the regen faster
|
|
263
|
-
state = stateTransition(
|
|
264
|
-
state,
|
|
261
|
+
state = state.stateTransition(
|
|
265
262
|
block,
|
|
266
263
|
{
|
|
267
264
|
// Replay previously imported blocks, assume valid and available
|
|
@@ -333,16 +330,17 @@ async function processSlotsByCheckpoint(
|
|
|
333
330
|
metrics: Metrics | null;
|
|
334
331
|
validatorMonitor: ValidatorMonitor | null;
|
|
335
332
|
emitter: ChainEventEmitter;
|
|
333
|
+
config: ChainForkConfig;
|
|
336
334
|
logger: Logger;
|
|
337
335
|
},
|
|
338
|
-
preState:
|
|
336
|
+
preState: IBeaconStateView,
|
|
339
337
|
slot: Slot,
|
|
340
338
|
regenCaller: RegenCaller,
|
|
341
339
|
opts: StateRegenerationOpts
|
|
342
|
-
): Promise<
|
|
340
|
+
): Promise<IBeaconStateView> {
|
|
343
341
|
let postState = await processSlotsToNearestCheckpoint(modules, preState, slot, regenCaller, opts);
|
|
344
342
|
if (postState.slot < slot) {
|
|
345
|
-
postState = processSlots(
|
|
343
|
+
postState = postState.processSlots(slot, opts, modules);
|
|
346
344
|
}
|
|
347
345
|
return postState;
|
|
348
346
|
}
|
|
@@ -365,18 +363,19 @@ export async function processSlotsToNearestCheckpoint(
|
|
|
365
363
|
metrics: Metrics | null;
|
|
366
364
|
validatorMonitor: ValidatorMonitor | null;
|
|
367
365
|
emitter: ChainEventEmitter | null;
|
|
366
|
+
config: ChainForkConfig;
|
|
368
367
|
logger: Logger | null;
|
|
369
368
|
},
|
|
370
|
-
preState:
|
|
369
|
+
preState: IBeaconStateView,
|
|
371
370
|
slot: Slot,
|
|
372
371
|
regenCaller: RegenCaller,
|
|
373
372
|
opts: StateRegenerationOpts
|
|
374
|
-
): Promise<
|
|
373
|
+
): Promise<IBeaconStateView> {
|
|
375
374
|
const preSlot = preState.slot;
|
|
376
375
|
const postSlot = slot;
|
|
377
376
|
const preEpoch = computeEpochAtSlot(preSlot);
|
|
378
377
|
let postState = preState;
|
|
379
|
-
const {checkpointStateCache, emitter, metrics, logger} = modules;
|
|
378
|
+
const {config, checkpointStateCache, emitter, metrics, logger} = modules;
|
|
380
379
|
let count = 0;
|
|
381
380
|
|
|
382
381
|
for (
|
|
@@ -391,7 +390,7 @@ export async function processSlotsToNearestCheckpoint(
|
|
|
391
390
|
caller: regenCaller,
|
|
392
391
|
});
|
|
393
392
|
// processSlots calls .clone() before mutating
|
|
394
|
-
postState = processSlots(
|
|
393
|
+
postState = postState.processSlots(nextEpochSlot, opts, modules);
|
|
395
394
|
metrics?.epochTransitionByCaller.inc({caller: regenCaller});
|
|
396
395
|
|
|
397
396
|
// this is usually added when we prepare for next slot or validate gossip block
|
|
@@ -403,7 +402,7 @@ export async function processSlotsToNearestCheckpoint(
|
|
|
403
402
|
// processSlots() only does epoch transitions, never processes payloads
|
|
404
403
|
// Pre-Gloas: payloadPresent is always true (execution payload embedded in block)
|
|
405
404
|
// Post-Gloas: result is a block state (payloadPresent=false)
|
|
406
|
-
const isPayloadPresent =
|
|
405
|
+
const isPayloadPresent = config.getForkSeq(checkpointState.slot) < ForkSeq.gloas;
|
|
407
406
|
checkpointStateCache.add(cp, checkpointState, isPayloadPresent);
|
|
408
407
|
// consumers should not mutate state ever
|
|
409
408
|
emitter?.emit(ChainEvent.checkpoint, cp, checkpointState);
|
|
@@ -3,5 +3,5 @@ export {SeenBlockProposers} from "./seenBlockProposers.js";
|
|
|
3
3
|
export {SeenSyncCommitteeMessages} from "./seenCommittee.js";
|
|
4
4
|
export {SeenContributionAndProof} from "./seenCommitteeContribution.js";
|
|
5
5
|
export {SeenExecutionPayloadBids} from "./seenExecutionPayloadBids.js";
|
|
6
|
-
export {SeenExecutionPayloadEnvelopes} from "./seenExecutionPayloadEnvelope.js";
|
|
7
6
|
export {SeenBlockInput} from "./seenGossipBlockInput.js";
|
|
7
|
+
export {PayloadEnvelopeInput, SeenPayloadEnvelopeInput} from "./seenPayloadEnvelopeInput.js";
|
|
@@ -149,8 +149,8 @@ export class SeenBlockInput {
|
|
|
149
149
|
});
|
|
150
150
|
}
|
|
151
151
|
|
|
152
|
-
|
|
153
|
-
return this.blockInputs.
|
|
152
|
+
hasBlock(rootHex: RootHex): boolean {
|
|
153
|
+
return this.blockInputs.get(rootHex)?.hasBlock() ?? false;
|
|
154
154
|
}
|
|
155
155
|
|
|
156
156
|
get(rootHex: RootHex): IBlockInput | undefined {
|
|
@@ -180,7 +180,7 @@ export class SeenBlockInput {
|
|
|
180
180
|
blockInput = this.blockInputs.get(parentRootHex ?? "");
|
|
181
181
|
parentRootHex = blockInput?.parentRootHex;
|
|
182
182
|
}
|
|
183
|
-
this.logger?.debug(
|
|
183
|
+
this.logger?.debug("BlockInputCache.prune deleted cached BlockInputs", {deletedCount});
|
|
184
184
|
this.pruneToMaxSize();
|
|
185
185
|
}
|
|
186
186
|
|
|
@@ -193,7 +193,7 @@ export class SeenBlockInput {
|
|
|
193
193
|
this.evictBlockInput(blockInput);
|
|
194
194
|
}
|
|
195
195
|
}
|
|
196
|
-
this.logger?.debug(
|
|
196
|
+
this.logger?.debug("BlockInputCache.onFinalized deleted cached BlockInputs", {deletedCount});
|
|
197
197
|
this.pruneToMaxSize();
|
|
198
198
|
};
|
|
199
199
|
|