@lodestar/beacon-node 1.42.0-dev.5f2fffc2ce → 1.42.0-dev.6fa48cb5f2
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 +36 -17
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/beacon/pool/index.js +1 -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 +27 -32
- 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/lodestar/index.d.ts.map +1 -1
- package/lib/api/impl/lodestar/index.js +4 -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 +27 -27
- 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/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/types.d.ts +4 -3
- 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 +27 -11
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/importExecutionPayload.d.ts +48 -0
- package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -0
- package/lib/chain/blocks/importExecutionPayload.js +158 -0
- package/lib/chain/blocks/importExecutionPayload.js.map +1 -0
- package/lib/chain/blocks/index.js +1 -1
- 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 +80 -0
- package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -0
- package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +248 -0
- package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -0
- package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +29 -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 +9 -2
- 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 +3 -3
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +3 -3
- 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 +1 -1
- 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 +19 -14
- package/lib/chain/chain.d.ts.map +1 -1
- package/lib/chain/chain.js +75 -42
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/emitter.d.ts +2 -2
- package/lib/chain/emitter.d.ts.map +1 -1
- package/lib/chain/errors/blockError.d.ts +4 -4
- package/lib/chain/errors/blockError.d.ts.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 +27 -33
- 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 +17 -15
- 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 +4 -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 +10 -13
- package/lib/chain/opPools/aggregatedAttestationPool.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 +2 -2
- 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 +3 -3
- 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 +8 -4
- package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts +5 -5
- package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +13 -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.js +2 -2
- 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 +3 -3
- 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.js +1 -1
- 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 +4 -4
- 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 +29 -19
- package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
- package/lib/chain/validation/lightClientFinalityUpdate.js +1 -1
- package/lib/chain/validation/lightClientFinalityUpdate.js.map +1 -1
- package/lib/chain/validation/lightClientOptimisticUpdate.js +1 -1
- package/lib/chain/validation/lightClientOptimisticUpdate.js.map +1 -1
- package/lib/chain/validation/payloadAttestationMessage.d.ts.map +1 -1
- package/lib/chain/validation/payloadAttestationMessage.js +1 -2
- 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 +13 -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 +1 -1
- 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 +13 -8
- package/lib/chain/validatorMonitor.js.map +1 -1
- package/lib/execution/engine/interface.d.ts +2 -2
- package/lib/metrics/metrics/lodestar.d.ts +40 -4
- package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
- package/lib/metrics/metrics/lodestar.js +93 -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/gossip/topic.d.ts +727 -0
- package/lib/network/gossip/topic.d.ts.map +1 -1
- package/lib/network/interface.d.ts +4 -2
- 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 +5 -0
- package/lib/network/libp2p/index.js.map +1 -1
- package/lib/network/network.d.ts +4 -2
- package/lib/network/network.d.ts.map +1 -1
- package/lib/network/network.js +11 -5
- package/lib/network/network.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 +15 -5
- 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 +39 -9
- package/lib/network/processor/gossipHandlers.js.map +1 -1
- package/lib/network/processor/index.d.ts +12 -7
- package/lib/network/processor/index.d.ts.map +1 -1
- package/lib/network/processor/index.js +99 -78
- package/lib/network/processor/index.js.map +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.d.ts +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.js +10 -1
- 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 +8 -2
- package/lib/network/reqresp/types.d.ts.map +1 -1
- package/lib/network/reqresp/types.js +7 -1
- 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 +1 -4
- 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 +3 -3
- package/lib/sync/backfill/backfill.d.ts.map +1 -1
- package/lib/sync/backfill/backfill.js +3 -3
- package/lib/sync/backfill/backfill.js.map +1 -1
- package/lib/sync/constants.d.ts +1 -1
- package/lib/sync/constants.js +1 -1
- package/lib/sync/unknownBlock.d.ts +3 -9
- package/lib/sync/unknownBlock.d.ts.map +1 -1
- package/lib/sync/unknownBlock.js +8 -41
- package/lib/sync/unknownBlock.js.map +1 -1
- package/lib/util/sszBytes.d.ts +4 -1
- package/lib/util/sszBytes.d.ts.map +1 -1
- package/lib/util/sszBytes.js +69 -12
- 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 +37 -18
- package/src/api/impl/beacon/pool/index.ts +1 -1
- package/src/api/impl/beacon/state/index.ts +29 -41
- package/src/api/impl/beacon/state/utils.ts +11 -25
- package/src/api/impl/lodestar/index.ts +4 -8
- package/src/api/impl/proof/index.ts +2 -9
- package/src/api/impl/validator/index.ts +29 -41
- package/src/api/impl/validator/utils.ts +4 -7
- 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/types.ts +4 -3
- package/src/chain/blocks/importBlock.ts +47 -16
- package/src/chain/blocks/importExecutionPayload.ts +236 -0
- package/src/chain/blocks/index.ts +1 -1
- package/src/chain/blocks/payloadEnvelopeInput/index.ts +2 -0
- package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +336 -0
- package/src/chain/blocks/payloadEnvelopeInput/types.ts +33 -0
- package/src/chain/blocks/payloadEnvelopeProcessor.ts +61 -0
- package/src/chain/blocks/types.ts +10 -2
- package/src/chain/blocks/utils/checkpoint.ts +2 -2
- package/src/chain/blocks/verifyBlock.ts +5 -10
- package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +5 -10
- package/src/chain/blocks/verifyBlocksSignatures.ts +3 -3
- package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +6 -8
- package/src/chain/blocks/writePayloadEnvelopeInputToDb.ts +55 -0
- package/src/chain/chain.ts +112 -70
- package/src/chain/emitter.ts +2 -2
- package/src/chain/errors/blockError.ts +4 -4
- package/src/chain/errors/executionPayloadEnvelope.ts +6 -2
- package/src/chain/forkChoice/index.ts +33 -52
- package/src/chain/initState.ts +7 -2
- package/src/chain/interface.ts +18 -16
- package/src/chain/lightClient/index.ts +9 -22
- package/src/chain/opPools/aggregatedAttestationPool.ts +15 -21
- package/src/chain/opPools/opPool.ts +13 -14
- package/src/chain/opPools/utils.ts +4 -4
- package/src/chain/options.ts +2 -0
- package/src/chain/prepareNextSlot.ts +6 -8
- package/src/chain/produceBlock/computeNewStateRoot.ts +11 -10
- package/src/chain/produceBlock/produceBlockBody.ts +23 -50
- 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 +2 -2
- 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 +2 -4
- package/src/chain/validation/blsToExecutionChange.ts +2 -2
- package/src/chain/validation/dataColumnSidecar.ts +1 -1
- package/src/chain/validation/executionPayloadBid.ts +3 -7
- package/src/chain/validation/executionPayloadEnvelope.ts +36 -29
- package/src/chain/validation/lightClientFinalityUpdate.ts +1 -1
- package/src/chain/validation/lightClientOptimisticUpdate.ts +1 -1
- package/src/chain/validation/payloadAttestationMessage.ts +2 -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 +21 -20
- package/src/chain/validation/syncCommitteeContributionAndProof.ts +5 -10
- package/src/chain/validation/voluntaryExit.ts +3 -8
- package/src/chain/validatorMonitor.ts +23 -12
- package/src/execution/engine/interface.ts +2 -2
- package/src/metrics/metrics/lodestar.ts +100 -19
- package/src/network/gossip/encoding.ts +16 -0
- package/src/network/interface.ts +15 -2
- package/src/network/libp2p/index.ts +5 -0
- package/src/network/network.ts +34 -6
- package/src/network/processor/extractSlotRootFns.ts +19 -6
- package/src/network/processor/gossipHandlers.ts +45 -8
- package/src/network/processor/index.ts +110 -89
- package/src/network/reqresp/ReqRespBeaconNode.ts +14 -1
- 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 +13 -0
- package/src/node/nodejs.ts +3 -5
- package/src/node/notifier.ts +4 -10
- package/src/sync/backfill/backfill.ts +4 -4
- package/src/sync/constants.ts +1 -1
- package/src/sync/unknownBlock.ts +10 -50
- package/src/util/sszBytes.ts +90 -10
- 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,6 +1,6 @@
|
|
|
1
1
|
import {Signature} from "@chainsafe/blst";
|
|
2
2
|
import {BLS_WITHDRAWAL_PREFIX} from "@lodestar/params";
|
|
3
|
-
import {
|
|
3
|
+
import {IBeaconStateView} from "@lodestar/state-transition";
|
|
4
4
|
import {Slot, capella} from "@lodestar/types";
|
|
5
5
|
import {AggregateFast, AggregateFastElectra} from "./attestationPool.js";
|
|
6
6
|
|
|
@@ -38,17 +38,17 @@ export function signatureFromBytesNoCheck(signature: Uint8Array): Signature {
|
|
|
38
38
|
* can become invalid for certain forks.
|
|
39
39
|
*/
|
|
40
40
|
export function isValidBlsToExecutionChangeForBlockInclusion(
|
|
41
|
-
state:
|
|
41
|
+
state: IBeaconStateView,
|
|
42
42
|
signedBLSToExecutionChange: capella.SignedBLSToExecutionChange
|
|
43
43
|
): boolean {
|
|
44
|
-
// For each condition from https://github.com/ethereum/consensus-specs/blob/
|
|
44
|
+
// For each condition from https://github.com/ethereum/consensus-specs/blob/v1.6.1/specs/capella/beacon-chain.md#new-process_bls_to_execution_change
|
|
45
45
|
//
|
|
46
46
|
// 1. assert address_change.validator_index < len(state.validators):
|
|
47
47
|
// If valid before will always be valid in the future, no need to check
|
|
48
48
|
//
|
|
49
49
|
// 2. assert validator.withdrawal_credentials[:1] == BLS_WITHDRAWAL_PREFIX:
|
|
50
50
|
// Must be checked again, since it can already be changed by now.
|
|
51
|
-
const validator = state.
|
|
51
|
+
const validator = state.getValidator(signedBLSToExecutionChange.message.validatorIndex);
|
|
52
52
|
const {withdrawalCredentials} = validator;
|
|
53
53
|
if (withdrawalCredentials[0] !== BLS_WITHDRAWAL_PREFIX) {
|
|
54
54
|
return false;
|
package/src/chain/options.ts
CHANGED
|
@@ -47,6 +47,7 @@ export type IChainOptions = BlockProcessOpts &
|
|
|
47
47
|
minSameMessageSignatureSetsToBatch: number;
|
|
48
48
|
archiveDateEpochs?: number;
|
|
49
49
|
nHistoricalStatesFileDataStore?: boolean;
|
|
50
|
+
nativeStateView?: boolean;
|
|
50
51
|
};
|
|
51
52
|
|
|
52
53
|
export type BlockProcessOpts = {
|
|
@@ -124,6 +125,7 @@ export const defaultChainOptions: IChainOptions = {
|
|
|
124
125
|
// - users can prune the persisted checkpoint state files manually to save disc space
|
|
125
126
|
// - it helps debug easier when network is unfinalized
|
|
126
127
|
nHistoricalStatesFileDataStore: true,
|
|
128
|
+
nativeStateView: false,
|
|
127
129
|
maxBlockStates: DEFAULT_MAX_BLOCK_STATES,
|
|
128
130
|
maxCPStateEpochsInMemory: DEFAULT_MAX_CP_STATE_EPOCHS_IN_MEMORY,
|
|
129
131
|
maxCPStateEpochsOnDisk: DEFAULT_MAX_CP_STATE_ON_DISK,
|
|
@@ -3,9 +3,7 @@ import {ChainForkConfig} from "@lodestar/config";
|
|
|
3
3
|
import {PayloadStatus, getSafeExecutionBlockHash} from "@lodestar/fork-choice";
|
|
4
4
|
import {ForkPostBellatrix, ForkSeq, SLOTS_PER_EPOCH, isForkPostBellatrix} from "@lodestar/params";
|
|
5
5
|
import {
|
|
6
|
-
|
|
7
|
-
CachedBeaconStateExecutions,
|
|
8
|
-
CachedBeaconStateGloas,
|
|
6
|
+
IBeaconStateView,
|
|
9
7
|
StateHashTreeRootSource,
|
|
10
8
|
computeEpochAtSlot,
|
|
11
9
|
computeTimeAtSlot,
|
|
@@ -121,9 +119,9 @@ export class PrepareNextSlotScheduler {
|
|
|
121
119
|
);
|
|
122
120
|
|
|
123
121
|
if (isForkPostBellatrix(fork)) {
|
|
124
|
-
const proposerIndex = prepareState.
|
|
122
|
+
const proposerIndex = prepareState.getBeaconProposer(prepareSlot);
|
|
125
123
|
const feeRecipient = this.chain.beaconProposerCache.get(proposerIndex);
|
|
126
|
-
let updatedPrepareState = prepareState
|
|
124
|
+
let updatedPrepareState = prepareState;
|
|
127
125
|
let updatedHeadRoot = headRoot;
|
|
128
126
|
|
|
129
127
|
if (feeRecipient) {
|
|
@@ -140,13 +138,13 @@ export class PrepareNextSlotScheduler {
|
|
|
140
138
|
headRoot,
|
|
141
139
|
});
|
|
142
140
|
this.metrics?.weakHeadDetected.inc();
|
|
143
|
-
updatedPrepareState =
|
|
141
|
+
updatedPrepareState = await this.chain.regen.getBlockSlotState(
|
|
144
142
|
proposerHead,
|
|
145
143
|
prepareSlot,
|
|
146
144
|
// only transfer cache if epoch transition because that's the state we will use to stateTransition() the 1st block of epoch
|
|
147
145
|
{dontTransferCache: !isEpochTransition},
|
|
148
146
|
RegenCaller.predictProposerHead
|
|
149
|
-
)
|
|
147
|
+
);
|
|
150
148
|
updatedHeadRoot = proposerHeadRoot;
|
|
151
149
|
}
|
|
152
150
|
|
|
@@ -239,7 +237,7 @@ export class PrepareNextSlotScheduler {
|
|
|
239
237
|
}
|
|
240
238
|
};
|
|
241
239
|
|
|
242
|
-
computeStateHashTreeRoot(state:
|
|
240
|
+
computeStateHashTreeRoot(state: IBeaconStateView, isEpochTransition: boolean): void {
|
|
243
241
|
// cache HashObjects for faster hashTreeRoot() later, especially for computeNewStateRoot() if we need to produce a block at slot 0 of epoch
|
|
244
242
|
// see https://github.com/ChainSafe/lodestar/issues/6194
|
|
245
243
|
const hashTreeRootTimer = this.metrics?.stateHashTreeRootTime.startTimer({
|
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
|
-
CachedBeaconStateAllForks,
|
|
3
|
-
CachedBeaconStateGloas,
|
|
4
2
|
DataAvailabilityStatus,
|
|
5
3
|
ExecutionPayloadStatus,
|
|
6
4
|
G2_POINT_AT_INFINITY,
|
|
5
|
+
IBeaconStateView,
|
|
7
6
|
StateHashTreeRootSource,
|
|
8
|
-
stateTransition,
|
|
9
7
|
} from "@lodestar/state-transition";
|
|
10
|
-
import {processExecutionPayloadEnvelope} from "@lodestar/state-transition/block";
|
|
11
8
|
import {BeaconBlock, BlindedBeaconBlock, Gwei, Root, gloas} from "@lodestar/types";
|
|
12
9
|
import {ZERO_HASH} from "../../constants/index.js";
|
|
13
10
|
import {Metrics} from "../../metrics/index.js";
|
|
@@ -19,14 +16,13 @@ import {Metrics} from "../../metrics/index.js";
|
|
|
19
16
|
*/
|
|
20
17
|
export function computeNewStateRoot(
|
|
21
18
|
metrics: Metrics | null,
|
|
22
|
-
state:
|
|
19
|
+
state: IBeaconStateView,
|
|
23
20
|
block: BeaconBlock | BlindedBeaconBlock
|
|
24
|
-
): {newStateRoot: Root; proposerReward: Gwei; postState:
|
|
21
|
+
): {newStateRoot: Root; proposerReward: Gwei; postState: IBeaconStateView} {
|
|
25
22
|
// Set signature to zero to re-use stateTransition() function which requires the SignedBeaconBlock type
|
|
26
23
|
const blockEmptySig = {message: block, signature: ZERO_HASH};
|
|
27
24
|
|
|
28
|
-
const postState = stateTransition(
|
|
29
|
-
state,
|
|
25
|
+
const postState = state.stateTransition(
|
|
30
26
|
blockEmptySig,
|
|
31
27
|
{
|
|
32
28
|
// ExecutionPayloadStatus.valid: Assume payload valid, it has been produced by a trusted EL
|
|
@@ -64,7 +60,7 @@ export function computeNewStateRoot(
|
|
|
64
60
|
*/
|
|
65
61
|
export function computeEnvelopeStateRoot(
|
|
66
62
|
metrics: Metrics | null,
|
|
67
|
-
postBlockState:
|
|
63
|
+
postBlockState: IBeaconStateView,
|
|
68
64
|
envelope: gloas.ExecutionPayloadEnvelope
|
|
69
65
|
): Root {
|
|
70
66
|
const signedEnvelope: gloas.SignedExecutionPayloadEnvelope = {
|
|
@@ -73,7 +69,12 @@ export function computeEnvelopeStateRoot(
|
|
|
73
69
|
};
|
|
74
70
|
|
|
75
71
|
const processEnvelopeTimer = metrics?.blockPayload.executionPayloadEnvelopeProcessingTime.startTimer();
|
|
76
|
-
const postEnvelopeState = processExecutionPayloadEnvelope(
|
|
72
|
+
const postEnvelopeState = postBlockState.processExecutionPayloadEnvelope(signedEnvelope, {
|
|
73
|
+
// Signature is zero-ed (G2_POINT_AT_INFINITY), skip verification
|
|
74
|
+
verifySignature: false,
|
|
75
|
+
// State root is being computed here, the envelope doesn't have it yet
|
|
76
|
+
verifyStateRoot: false,
|
|
77
|
+
// Preserve cache in source state, since the resulting state is not added to the state cache
|
|
77
78
|
dontTransferCache: true,
|
|
78
79
|
});
|
|
79
80
|
processEnvelopeTimer?.();
|
|
@@ -14,17 +14,7 @@ import {
|
|
|
14
14
|
isForkPostBellatrix,
|
|
15
15
|
isForkPostGloas,
|
|
16
16
|
} from "@lodestar/params";
|
|
17
|
-
import {
|
|
18
|
-
CachedBeaconStateAllForks,
|
|
19
|
-
CachedBeaconStateBellatrix,
|
|
20
|
-
CachedBeaconStateCapella,
|
|
21
|
-
CachedBeaconStateExecutions,
|
|
22
|
-
CachedBeaconStateGloas,
|
|
23
|
-
G2_POINT_AT_INFINITY,
|
|
24
|
-
computeTimeAtSlot,
|
|
25
|
-
getExpectedWithdrawals,
|
|
26
|
-
getRandaoMix,
|
|
27
|
-
} from "@lodestar/state-transition";
|
|
17
|
+
import {G2_POINT_AT_INFINITY, IBeaconStateView, computeTimeAtSlot} from "@lodestar/state-transition";
|
|
28
18
|
import {
|
|
29
19
|
BLSPubkey,
|
|
30
20
|
BLSSignature,
|
|
@@ -161,7 +151,7 @@ export type ProduceResult =
|
|
|
161
151
|
export async function produceBlockBody<T extends BlockType>(
|
|
162
152
|
this: BeaconChain,
|
|
163
153
|
blockType: T,
|
|
164
|
-
currentState:
|
|
154
|
+
currentState: IBeaconStateView,
|
|
165
155
|
blockAttr: BlockAttributes & {
|
|
166
156
|
proposerIndex: ValidatorIndex;
|
|
167
157
|
proposerPubKey: BLSPubkey;
|
|
@@ -204,7 +194,6 @@ export async function produceBlockBody<T extends BlockType>(
|
|
|
204
194
|
// TODO GLOAS: support non self-building here, the block type differentiation between
|
|
205
195
|
// full and blinded no longer makes sense in gloas, it might be a good idea to move
|
|
206
196
|
// this into a completely separate function and have pre/post gloas more separated
|
|
207
|
-
const gloasState = currentState as CachedBeaconStateGloas;
|
|
208
197
|
const safeBlockHash = getSafeExecutionBlockHash(this.forkChoice);
|
|
209
198
|
const finalizedBlockHash = this.forkChoice.getFinalizedBlock().executionPayloadBlockHash ?? ZERO_HASH_HEX;
|
|
210
199
|
const feeRecipient = requestedFeeRecipient ?? this.beaconProposerCache.getOrDefault(proposerIndex);
|
|
@@ -225,7 +214,7 @@ export async function produceBlockBody<T extends BlockType>(
|
|
|
225
214
|
parentBlockRoot,
|
|
226
215
|
safeBlockHash,
|
|
227
216
|
finalizedBlockHash ?? ZERO_HASH_HEX,
|
|
228
|
-
|
|
217
|
+
currentState,
|
|
229
218
|
feeRecipient
|
|
230
219
|
);
|
|
231
220
|
|
|
@@ -259,10 +248,10 @@ export async function produceBlockBody<T extends BlockType>(
|
|
|
259
248
|
|
|
260
249
|
// Create self-build execution payload bid
|
|
261
250
|
const bid: gloas.ExecutionPayloadBid = {
|
|
262
|
-
parentBlockHash:
|
|
251
|
+
parentBlockHash: currentState.latestBlockHash,
|
|
263
252
|
parentBlockRoot: parentBlockRoot,
|
|
264
253
|
blockHash: executionPayload.blockHash,
|
|
265
|
-
prevRandao: getRandaoMix(
|
|
254
|
+
prevRandao: currentState.getRandaoMix(currentState.epoch),
|
|
266
255
|
feeRecipient: executionPayload.feeRecipient,
|
|
267
256
|
gasLimit: BigInt(executionPayload.gasLimit),
|
|
268
257
|
builderIndex: BUILDER_INDEX_SELF_BUILD,
|
|
@@ -336,7 +325,7 @@ export async function produceBlockBody<T extends BlockType>(
|
|
|
336
325
|
parentBlockRoot,
|
|
337
326
|
safeBlockHash,
|
|
338
327
|
finalizedBlockHash ?? ZERO_HASH_HEX,
|
|
339
|
-
currentState
|
|
328
|
+
currentState,
|
|
340
329
|
executionBuilder.issueLocalFcUWithFeeRecipient
|
|
341
330
|
);
|
|
342
331
|
}
|
|
@@ -348,12 +337,7 @@ export async function produceBlockBody<T extends BlockType>(
|
|
|
348
337
|
slot: blockSlot,
|
|
349
338
|
proposerPubKey: toHex(proposerPubKey),
|
|
350
339
|
});
|
|
351
|
-
const headerRes = await prepareExecutionPayloadHeader(
|
|
352
|
-
this,
|
|
353
|
-
fork,
|
|
354
|
-
currentState as CachedBeaconStateBellatrix,
|
|
355
|
-
proposerPubKey
|
|
356
|
-
);
|
|
340
|
+
const headerRes = await prepareExecutionPayloadHeader(this, fork, currentState, proposerPubKey);
|
|
357
341
|
|
|
358
342
|
endExecutionPayloadHeader?.({
|
|
359
343
|
step: BlockProductionStep.executionPayload,
|
|
@@ -388,7 +372,7 @@ export async function produceBlockBody<T extends BlockType>(
|
|
|
388
372
|
});
|
|
389
373
|
} else {
|
|
390
374
|
const headerGasLimit = builderRes.header.gasLimit;
|
|
391
|
-
const parentGasLimit =
|
|
375
|
+
const parentGasLimit = currentState.latestExecutionPayloadHeader.gasLimit;
|
|
392
376
|
const expectedGasLimit = getExpectedGasLimit(parentGasLimit, targetGasLimit);
|
|
393
377
|
|
|
394
378
|
const lowerBound = Math.min(parentGasLimit, expectedGasLimit);
|
|
@@ -441,7 +425,7 @@ export async function produceBlockBody<T extends BlockType>(
|
|
|
441
425
|
parentBlockRoot: toRootHex(parentBlockRoot),
|
|
442
426
|
feeRecipient,
|
|
443
427
|
});
|
|
444
|
-
// https://github.com/ethereum/consensus-specs/blob/
|
|
428
|
+
// https://github.com/ethereum/consensus-specs/blob/v1.6.1/specs/deneb/validator.md#constructing-the-beaconblockbody
|
|
445
429
|
const prepareRes = await prepareExecutionPayload(
|
|
446
430
|
this,
|
|
447
431
|
this.logger,
|
|
@@ -449,7 +433,7 @@ export async function produceBlockBody<T extends BlockType>(
|
|
|
449
433
|
parentBlockRoot,
|
|
450
434
|
safeBlockHash,
|
|
451
435
|
finalizedBlockHash ?? ZERO_HASH_HEX,
|
|
452
|
-
currentState
|
|
436
|
+
currentState,
|
|
453
437
|
feeRecipient
|
|
454
438
|
);
|
|
455
439
|
|
|
@@ -614,14 +598,12 @@ export async function prepareExecutionPayload(
|
|
|
614
598
|
parentBlockRoot: Root,
|
|
615
599
|
safeBlockHash: RootHex,
|
|
616
600
|
finalizedBlockHash: RootHex,
|
|
617
|
-
state:
|
|
601
|
+
state: IBeaconStateView,
|
|
618
602
|
suggestedFeeRecipient: string
|
|
619
603
|
): Promise<{prepType: PayloadPreparationType; payloadId: PayloadId}> {
|
|
620
|
-
const parentHash =
|
|
621
|
-
? (state as CachedBeaconStateGloas).latestBlockHash
|
|
622
|
-
: (state as CachedBeaconStateExecutions).latestExecutionPayloadHeader.blockHash;
|
|
604
|
+
const parentHash = state.latestBlockHash;
|
|
623
605
|
const timestamp = computeTimeAtSlot(chain.config, state.slot, state.genesisTime);
|
|
624
|
-
const prevRandao = getRandaoMix(state
|
|
606
|
+
const prevRandao = state.getRandaoMix(state.epoch);
|
|
625
607
|
|
|
626
608
|
const payloadIdCached = chain.executionEngine.payloadIdCache.get({
|
|
627
609
|
headBlockHash: toRootHex(parentHash),
|
|
@@ -684,7 +666,7 @@ async function prepareExecutionPayloadHeader(
|
|
|
684
666
|
config: ChainForkConfig;
|
|
685
667
|
},
|
|
686
668
|
fork: ForkPostBellatrix,
|
|
687
|
-
state:
|
|
669
|
+
state: IBeaconStateView,
|
|
688
670
|
proposerPubKey: BLSPubkey
|
|
689
671
|
): Promise<{
|
|
690
672
|
header: ExecutionPayloadHeader;
|
|
@@ -711,16 +693,9 @@ export function getPayloadAttributesForSSE(
|
|
|
711
693
|
prepareSlot,
|
|
712
694
|
parentBlockRoot,
|
|
713
695
|
feeRecipient,
|
|
714
|
-
}: {
|
|
715
|
-
prepareState: CachedBeaconStateExecutions | CachedBeaconStateGloas;
|
|
716
|
-
prepareSlot: Slot;
|
|
717
|
-
parentBlockRoot: Root;
|
|
718
|
-
feeRecipient: string;
|
|
719
|
-
}
|
|
696
|
+
}: {prepareState: IBeaconStateView; prepareSlot: Slot; parentBlockRoot: Root; feeRecipient: string}
|
|
720
697
|
): SSEPayloadAttributes {
|
|
721
|
-
const parentHash =
|
|
722
|
-
? (prepareState as CachedBeaconStateGloas).latestBlockHash
|
|
723
|
-
: (prepareState as CachedBeaconStateExecutions).latestExecutionPayloadHeader.blockHash;
|
|
698
|
+
const parentHash = prepareState.latestBlockHash;
|
|
724
699
|
const payloadAttributes = preparePayloadAttributes(fork, chain, {
|
|
725
700
|
prepareState,
|
|
726
701
|
prepareSlot,
|
|
@@ -736,11 +711,11 @@ export function getPayloadAttributesForSSE(
|
|
|
736
711
|
}
|
|
737
712
|
parentBlockNumber = parentBlock.executionPayloadNumber;
|
|
738
713
|
} else {
|
|
739
|
-
parentBlockNumber =
|
|
714
|
+
parentBlockNumber = prepareState.payloadBlockNumber;
|
|
740
715
|
}
|
|
741
716
|
|
|
742
717
|
const ssePayloadAttributes: SSEPayloadAttributes = {
|
|
743
|
-
proposerIndex: prepareState.
|
|
718
|
+
proposerIndex: prepareState.getBeaconProposer(prepareSlot),
|
|
744
719
|
proposalSlot: prepareSlot,
|
|
745
720
|
parentBlockNumber,
|
|
746
721
|
parentBlockRoot,
|
|
@@ -761,14 +736,14 @@ function preparePayloadAttributes(
|
|
|
761
736
|
parentBlockRoot,
|
|
762
737
|
feeRecipient,
|
|
763
738
|
}: {
|
|
764
|
-
prepareState:
|
|
739
|
+
prepareState: IBeaconStateView;
|
|
765
740
|
prepareSlot: Slot;
|
|
766
741
|
parentBlockRoot: Root;
|
|
767
742
|
feeRecipient: string;
|
|
768
743
|
}
|
|
769
744
|
): SSEPayloadAttributes["payloadAttributes"] {
|
|
770
745
|
const timestamp = computeTimeAtSlot(chain.config, prepareSlot, prepareState.genesisTime);
|
|
771
|
-
const prevRandao = getRandaoMix(prepareState
|
|
746
|
+
const prevRandao = prepareState.getRandaoMix(prepareState.epoch);
|
|
772
747
|
const payloadAttributes = {
|
|
773
748
|
timestamp,
|
|
774
749
|
prevRandao,
|
|
@@ -777,10 +752,8 @@ function preparePayloadAttributes(
|
|
|
777
752
|
|
|
778
753
|
if (ForkSeq[fork] >= ForkSeq.capella) {
|
|
779
754
|
// withdrawals logic is now fork aware as it changes on electra fork post capella
|
|
780
|
-
(payloadAttributes as capella.SSEPayloadAttributes["payloadAttributes"]).withdrawals =
|
|
781
|
-
|
|
782
|
-
prepareState as CachedBeaconStateCapella
|
|
783
|
-
).expectedWithdrawals;
|
|
755
|
+
(payloadAttributes as capella.SSEPayloadAttributes["payloadAttributes"]).withdrawals =
|
|
756
|
+
prepareState.getExpectedWithdrawals().expectedWithdrawals;
|
|
784
757
|
}
|
|
785
758
|
|
|
786
759
|
if (ForkSeq[fork] >= ForkSeq.deneb) {
|
|
@@ -793,7 +766,7 @@ function preparePayloadAttributes(
|
|
|
793
766
|
export async function produceCommonBlockBody<T extends BlockType>(
|
|
794
767
|
this: BeaconChain,
|
|
795
768
|
blockType: T,
|
|
796
|
-
currentState:
|
|
769
|
+
currentState: IBeaconStateView,
|
|
797
770
|
{randaoReveal, graffiti, slot, parentBlock}: BlockAttributes
|
|
798
771
|
): Promise<CommonBlockBody> {
|
|
799
772
|
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,
|