@lodestar/beacon-node 1.40.0-dev.9e8478fc70 → 1.40.0-dev.ade3accfa0
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 +15 -9
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/lodestar/index.d.ts.map +1 -1
- package/lib/api/impl/lodestar/index.js +24 -0
- package/lib/api/impl/lodestar/index.js.map +1 -1
- package/lib/api/impl/validator/index.d.ts.map +1 -1
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/api/rest/base.d.ts.map +1 -1
- package/lib/api/rest/base.js +12 -10
- package/lib/api/rest/base.js.map +1 -1
- package/lib/chain/ColumnReconstructionTracker.d.ts +2 -0
- package/lib/chain/ColumnReconstructionTracker.d.ts.map +1 -1
- package/lib/chain/ColumnReconstructionTracker.js +7 -3
- package/lib/chain/ColumnReconstructionTracker.js.map +1 -1
- package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
- package/lib/chain/archiveStore/archiveStore.js +10 -4
- package/lib/chain/archiveStore/archiveStore.js.map +1 -1
- package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +1 -1
- package/lib/chain/archiveStore/historicalState/getHistoricalState.js +2 -1
- package/lib/chain/archiveStore/historicalState/getHistoricalState.js.map +1 -1
- package/lib/chain/blocks/blockInput/blockInput.d.ts +28 -0
- package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
- package/lib/chain/blocks/blockInput/blockInput.js +38 -3
- package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
- package/lib/chain/blocks/importBlock.d.ts.map +1 -1
- package/lib/chain/blocks/importBlock.js +10 -2
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlock.js +1 -1
- package/lib/chain/blocks/verifyBlock.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 +2 -2
- package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js +1 -2
- package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
- package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +1 -1
- package/lib/chain/blocks/writeBlockInputToDb.js +8 -0
- package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
- package/lib/chain/bls/multithread/index.d.ts +3 -1
- package/lib/chain/bls/multithread/index.d.ts.map +1 -1
- package/lib/chain/bls/multithread/index.js +5 -3
- package/lib/chain/bls/multithread/index.js.map +1 -1
- package/lib/chain/bls/multithread/jobItem.d.ts +2 -2
- package/lib/chain/bls/multithread/jobItem.d.ts.map +1 -1
- package/lib/chain/bls/multithread/jobItem.js +2 -2
- package/lib/chain/bls/multithread/jobItem.js.map +1 -1
- package/lib/chain/bls/singleThread.d.ts +4 -2
- package/lib/chain/bls/singleThread.d.ts.map +1 -1
- package/lib/chain/bls/singleThread.js +4 -2
- package/lib/chain/bls/singleThread.js.map +1 -1
- package/lib/chain/bls/utils.d.ts +2 -2
- package/lib/chain/bls/utils.d.ts.map +1 -1
- package/lib/chain/bls/utils.js +9 -6
- package/lib/chain/bls/utils.js.map +1 -1
- package/lib/chain/chain.d.ts +8 -3
- package/lib/chain/chain.d.ts.map +1 -1
- package/lib/chain/chain.js +44 -36
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/errors/attestationError.d.ts +14 -1
- package/lib/chain/errors/attestationError.d.ts.map +1 -1
- package/lib/chain/errors/attestationError.js +8 -0
- package/lib/chain/errors/attestationError.js.map +1 -1
- package/lib/chain/errors/executionPayloadBid.d.ts +48 -0
- package/lib/chain/errors/executionPayloadBid.d.ts.map +1 -0
- package/lib/chain/errors/executionPayloadBid.js +15 -0
- package/lib/chain/errors/executionPayloadBid.js.map +1 -0
- package/lib/chain/errors/executionPayloadEnvelope.d.ts +48 -0
- package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -0
- package/lib/chain/errors/executionPayloadEnvelope.js +16 -0
- package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -0
- package/lib/chain/errors/index.d.ts +3 -0
- package/lib/chain/errors/index.d.ts.map +1 -1
- package/lib/chain/errors/index.js +3 -0
- package/lib/chain/errors/index.js.map +1 -1
- package/lib/chain/errors/payloadAttestation.d.ts +34 -0
- package/lib/chain/errors/payloadAttestation.d.ts.map +1 -0
- package/lib/chain/errors/payloadAttestation.js +13 -0
- package/lib/chain/errors/payloadAttestation.js.map +1 -0
- package/lib/chain/forkChoice/index.d.ts.map +1 -1
- package/lib/chain/forkChoice/index.js +18 -0
- package/lib/chain/forkChoice/index.js.map +1 -1
- package/lib/chain/initState.d.ts.map +1 -1
- package/lib/chain/initState.js +2 -2
- package/lib/chain/initState.js.map +1 -1
- package/lib/chain/interface.d.ts +7 -2
- package/lib/chain/interface.d.ts.map +1 -1
- package/lib/chain/interface.js.map +1 -1
- package/lib/chain/lightClient/index.d.ts +2 -0
- package/lib/chain/lightClient/index.d.ts.map +1 -1
- package/lib/chain/lightClient/index.js +11 -6
- package/lib/chain/lightClient/index.js.map +1 -1
- package/lib/chain/opPools/executionPayloadBidPool.d.ts +21 -0
- package/lib/chain/opPools/executionPayloadBidPool.d.ts.map +1 -0
- package/lib/chain/opPools/executionPayloadBidPool.js +57 -0
- package/lib/chain/opPools/executionPayloadBidPool.js.map +1 -0
- package/lib/chain/opPools/index.d.ts +2 -0
- package/lib/chain/opPools/index.d.ts.map +1 -1
- package/lib/chain/opPools/index.js +2 -0
- package/lib/chain/opPools/index.js.map +1 -1
- package/lib/chain/opPools/payloadAttestationPool.d.ts +24 -0
- package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -0
- package/lib/chain/opPools/payloadAttestationPool.js +109 -0
- package/lib/chain/opPools/payloadAttestationPool.js.map +1 -0
- package/lib/chain/options.d.ts +0 -1
- package/lib/chain/options.d.ts.map +1 -1
- package/lib/chain/options.js +0 -1
- package/lib/chain/options.js.map +1 -1
- package/lib/chain/regen/interface.d.ts +2 -1
- package/lib/chain/regen/interface.d.ts.map +1 -1
- package/lib/chain/regen/interface.js +1 -0
- package/lib/chain/regen/interface.js.map +1 -1
- package/lib/chain/regen/queued.d.ts +1 -1
- 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 +2 -0
- package/lib/chain/regen/regen.d.ts.map +1 -1
- package/lib/chain/regen/regen.js +4 -1
- package/lib/chain/regen/regen.js.map +1 -1
- package/lib/chain/seenCache/index.d.ts +3 -1
- package/lib/chain/seenCache/index.d.ts.map +1 -1
- package/lib/chain/seenCache/index.js +3 -1
- package/lib/chain/seenCache/index.js.map +1 -1
- package/lib/chain/seenCache/seenAttesters.d.ts +5 -0
- package/lib/chain/seenCache/seenAttesters.d.ts.map +1 -1
- package/lib/chain/seenCache/seenAttesters.js +5 -0
- package/lib/chain/seenCache/seenAttesters.js.map +1 -1
- package/lib/chain/seenCache/seenExecutionPayloadBids.d.ts +12 -0
- package/lib/chain/seenCache/seenExecutionPayloadBids.d.ts.map +1 -0
- package/lib/chain/seenCache/seenExecutionPayloadBids.js +30 -0
- package/lib/chain/seenCache/seenExecutionPayloadBids.js.map +1 -0
- package/lib/chain/seenCache/seenExecutionPayloadEnvelope.d.ts +15 -0
- package/lib/chain/seenCache/seenExecutionPayloadEnvelope.d.ts.map +1 -0
- package/lib/chain/seenCache/seenExecutionPayloadEnvelope.js +28 -0
- package/lib/chain/seenCache/seenExecutionPayloadEnvelope.js.map +1 -0
- package/lib/chain/seenCache/seenGossipBlockInput.d.ts +7 -7
- package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.js +23 -12
- package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
- package/lib/chain/serializeState.d.ts.map +1 -1
- package/lib/chain/serializeState.js +2 -1
- package/lib/chain/serializeState.js.map +1 -1
- package/lib/chain/stateCache/index.d.ts +0 -2
- package/lib/chain/stateCache/index.d.ts.map +1 -1
- package/lib/chain/stateCache/index.js +0 -2
- package/lib/chain/stateCache/index.js.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +2 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.js +3 -0
- package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
- package/lib/chain/validation/aggregateAndProof.js +35 -14
- package/lib/chain/validation/aggregateAndProof.js.map +1 -1
- package/lib/chain/validation/attestation.d.ts +2 -2
- package/lib/chain/validation/attestation.d.ts.map +1 -1
- package/lib/chain/validation/attestation.js +27 -8
- package/lib/chain/validation/attestation.js.map +1 -1
- package/lib/chain/validation/attesterSlashing.d.ts.map +1 -1
- package/lib/chain/validation/attesterSlashing.js +1 -1
- package/lib/chain/validation/attesterSlashing.js.map +1 -1
- package/lib/chain/validation/blobSidecar.d.ts.map +1 -1
- package/lib/chain/validation/blobSidecar.js +4 -4
- 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 +6 -6
- package/lib/chain/validation/block.js.map +1 -1
- package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
- package/lib/chain/validation/dataColumnSidecar.js +4 -4
- package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
- package/lib/chain/validation/executionPayloadBid.d.ts +5 -0
- package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -0
- package/lib/chain/validation/executionPayloadBid.js +104 -0
- package/lib/chain/validation/executionPayloadBid.js.map +1 -0
- package/lib/chain/validation/executionPayloadEnvelope.d.ts +5 -0
- package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -0
- package/lib/chain/validation/executionPayloadEnvelope.js +89 -0
- package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -0
- package/lib/chain/validation/payloadAttestationMessage.d.ts +9 -0
- package/lib/chain/validation/payloadAttestationMessage.d.ts.map +1 -0
- package/lib/chain/validation/payloadAttestationMessage.js +72 -0
- package/lib/chain/validation/payloadAttestationMessage.js.map +1 -0
- package/lib/chain/validation/proposerSlashing.js +1 -1
- package/lib/chain/validation/proposerSlashing.js.map +1 -1
- package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts +2 -3
- package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/aggregateAndProof.js +8 -3
- package/lib/chain/validation/signatureSets/aggregateAndProof.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 +3 -3
- package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
- package/lib/chain/validation/signatureSets/selectionProof.d.ts +2 -3
- package/lib/chain/validation/signatureSets/selectionProof.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/selectionProof.js +8 -3
- package/lib/chain/validation/signatureSets/selectionProof.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 +3 -3
- package/lib/chain/validation/signatureSets/syncCommittee.js.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts +1 -2
- package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommitteeContribution.js +2 -2
- 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 +3 -3
- package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js.map +1 -1
- package/lib/chain/validation/syncCommittee.js +1 -1
- 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 +3 -5
- package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
- package/lib/chain/validation/voluntaryExit.js +1 -1
- package/lib/chain/validation/voluntaryExit.js.map +1 -1
- package/lib/chain/validatorMonitor.d.ts.map +1 -1
- package/lib/chain/validatorMonitor.js +7 -4
- package/lib/chain/validatorMonitor.js.map +1 -1
- package/lib/db/repositories/checkpointState.js +0 -1
- package/lib/db/repositories/checkpointState.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +20 -0
- package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
- package/lib/metrics/metrics/lodestar.js +40 -0
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/network/core/networkCore.d.ts +3 -0
- package/lib/network/core/networkCore.d.ts.map +1 -1
- package/lib/network/core/networkCore.js +9 -0
- package/lib/network/core/networkCore.js.map +1 -1
- package/lib/network/core/networkCoreWorker.js +3 -0
- package/lib/network/core/networkCoreWorker.js.map +1 -1
- package/lib/network/core/networkCoreWorkerHandler.d.ts +3 -0
- package/lib/network/core/networkCoreWorkerHandler.d.ts.map +1 -1
- package/lib/network/core/networkCoreWorkerHandler.js +9 -0
- package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
- package/lib/network/core/types.d.ts +3 -0
- package/lib/network/core/types.d.ts.map +1 -1
- package/lib/network/gossip/gossipsub.d.ts +34 -0
- package/lib/network/gossip/gossipsub.d.ts.map +1 -1
- package/lib/network/gossip/gossipsub.js +123 -0
- package/lib/network/gossip/gossipsub.js.map +1 -1
- package/lib/network/gossip/interface.d.ts +20 -2
- package/lib/network/gossip/interface.d.ts.map +1 -1
- package/lib/network/gossip/interface.js +3 -0
- package/lib/network/gossip/interface.js.map +1 -1
- package/lib/network/gossip/scoringParameters.d.ts.map +1 -1
- package/lib/network/gossip/scoringParameters.js +38 -2
- package/lib/network/gossip/scoringParameters.js.map +1 -1
- package/lib/network/gossip/topic.d.ts +77 -1
- package/lib/network/gossip/topic.d.ts.map +1 -1
- package/lib/network/gossip/topic.js +20 -0
- package/lib/network/gossip/topic.js.map +1 -1
- package/lib/network/network.d.ts +3 -0
- package/lib/network/network.d.ts.map +1 -1
- package/lib/network/network.js +9 -0
- package/lib/network/network.js.map +1 -1
- package/lib/network/options.d.ts +6 -0
- package/lib/network/options.d.ts.map +1 -1
- package/lib/network/options.js.map +1 -1
- package/lib/network/peers/peerManager.d.ts.map +1 -1
- package/lib/network/peers/peerManager.js +9 -0
- package/lib/network/peers/peerManager.js.map +1 -1
- package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
- package/lib/network/processor/gossipHandlers.js +35 -1
- package/lib/network/processor/gossipHandlers.js.map +1 -1
- package/lib/network/processor/gossipQueues/index.d.ts.map +1 -1
- package/lib/network/processor/gossipQueues/index.js +16 -0
- package/lib/network/processor/gossipQueues/index.js.map +1 -1
- package/lib/network/processor/index.d.ts.map +1 -1
- package/lib/network/processor/index.js +3 -0
- package/lib/network/processor/index.js.map +1 -1
- package/lib/sync/backfill/backfill.d.ts.map +1 -1
- package/lib/sync/backfill/backfill.js +3 -4
- package/lib/sync/backfill/backfill.js.map +1 -1
- package/lib/sync/backfill/verify.d.ts +1 -2
- package/lib/sync/backfill/verify.d.ts.map +1 -1
- package/lib/sync/backfill/verify.js +2 -2
- package/lib/sync/backfill/verify.js.map +1 -1
- package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
- package/lib/sync/utils/downloadByRange.js +2 -2
- package/lib/sync/utils/downloadByRange.js.map +1 -1
- package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
- package/lib/sync/utils/downloadByRoot.js +1 -2
- package/lib/sync/utils/downloadByRoot.js.map +1 -1
- package/lib/util/queue/itemQueue.d.ts +10 -0
- package/lib/util/queue/itemQueue.d.ts.map +1 -1
- package/lib/util/queue/itemQueue.js +57 -0
- package/lib/util/queue/itemQueue.js.map +1 -1
- package/package.json +16 -16
- package/src/api/impl/beacon/blocks/index.ts +31 -19
- package/src/api/impl/lodestar/index.ts +29 -0
- package/src/api/impl/validator/index.ts +2 -1
- package/src/api/rest/base.ts +15 -13
- package/src/chain/ColumnReconstructionTracker.ts +8 -4
- package/src/chain/archiveStore/archiveStore.ts +10 -4
- package/src/chain/archiveStore/historicalState/getHistoricalState.ts +2 -1
- package/src/chain/blocks/blockInput/blockInput.ts +47 -4
- package/src/chain/blocks/importBlock.ts +10 -2
- package/src/chain/blocks/verifyBlock.ts +0 -1
- package/src/chain/blocks/verifyBlocksSignatures.ts +4 -12
- package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +1 -2
- package/src/chain/blocks/writeBlockInputToDb.ts +9 -0
- package/src/chain/bls/multithread/index.ts +7 -4
- package/src/chain/bls/multithread/jobItem.ts +7 -3
- package/src/chain/bls/singleThread.ts +5 -3
- package/src/chain/bls/utils.ts +15 -7
- package/src/chain/chain.ts +52 -38
- package/src/chain/errors/attestationError.ts +11 -1
- package/src/chain/errors/executionPayloadBid.ts +35 -0
- package/src/chain/errors/executionPayloadEnvelope.ts +34 -0
- package/src/chain/errors/index.ts +3 -0
- package/src/chain/errors/payloadAttestation.ts +25 -0
- package/src/chain/forkChoice/index.ts +19 -0
- package/src/chain/initState.ts +2 -2
- package/src/chain/interface.ts +16 -1
- package/src/chain/lightClient/index.ts +12 -6
- package/src/chain/opPools/executionPayloadBidPool.ts +77 -0
- package/src/chain/opPools/index.ts +2 -0
- package/src/chain/opPools/payloadAttestationPool.ts +157 -0
- package/src/chain/options.ts +0 -2
- package/src/chain/regen/interface.ts +2 -1
- package/src/chain/regen/queued.ts +1 -2
- package/src/chain/regen/regen.ts +6 -1
- package/src/chain/seenCache/index.ts +3 -1
- package/src/chain/seenCache/seenAttesters.ts +5 -0
- package/src/chain/seenCache/seenExecutionPayloadBids.ts +35 -0
- package/src/chain/seenCache/seenExecutionPayloadEnvelope.ts +34 -0
- package/src/chain/seenCache/seenGossipBlockInput.ts +31 -12
- package/src/chain/serializeState.ts +2 -1
- package/src/chain/stateCache/index.ts +0 -2
- package/src/chain/stateCache/persistentCheckpointsCache.ts +6 -2
- package/src/chain/validation/aggregateAndProof.ts +36 -14
- package/src/chain/validation/attestation.ts +33 -16
- package/src/chain/validation/attesterSlashing.ts +1 -6
- package/src/chain/validation/blobSidecar.ts +3 -8
- package/src/chain/validation/block.ts +6 -6
- package/src/chain/validation/dataColumnSidecar.ts +3 -8
- package/src/chain/validation/executionPayloadBid.ts +141 -0
- package/src/chain/validation/executionPayloadEnvelope.ts +122 -0
- package/src/chain/validation/payloadAttestationMessage.ts +109 -0
- package/src/chain/validation/proposerSlashing.ts +1 -6
- package/src/chain/validation/signatureSets/aggregateAndProof.ts +9 -14
- package/src/chain/validation/signatureSets/contributionAndProof.ts +2 -4
- package/src/chain/validation/signatureSets/selectionProof.ts +9 -9
- package/src/chain/validation/signatureSets/syncCommittee.ts +2 -4
- package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +2 -3
- package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +2 -4
- package/src/chain/validation/syncCommittee.ts +1 -1
- package/src/chain/validation/syncCommitteeContributionAndProof.ts +3 -5
- package/src/chain/validation/voluntaryExit.ts +1 -1
- package/src/chain/validatorMonitor.ts +10 -5
- package/src/db/repositories/checkpointState.ts +1 -1
- package/src/metrics/metrics/lodestar.ts +40 -0
- package/src/network/core/networkCore.ts +12 -0
- package/src/network/core/networkCoreWorker.ts +3 -0
- package/src/network/core/networkCoreWorkerHandler.ts +9 -0
- package/src/network/core/types.ts +6 -0
- package/src/network/gossip/gossipsub.ts +147 -1
- package/src/network/gossip/interface.ts +17 -0
- package/src/network/gossip/scoringParameters.ts +44 -2
- package/src/network/gossip/topic.ts +21 -0
- package/src/network/network.ts +12 -0
- package/src/network/options.ts +6 -0
- package/src/network/peers/peerManager.ts +11 -0
- package/src/network/processor/gossipHandlers.ts +49 -1
- package/src/network/processor/gossipQueues/index.ts +16 -0
- package/src/network/processor/index.ts +3 -0
- package/src/sync/backfill/backfill.ts +3 -4
- package/src/sync/backfill/verify.ts +2 -3
- package/src/sync/utils/downloadByRange.ts +2 -2
- package/src/sync/utils/downloadByRoot.ts +1 -2
- package/src/util/queue/itemQueue.ts +62 -0
- package/lib/chain/stateCache/blockStateCacheImpl.d.ts +0 -54
- package/lib/chain/stateCache/blockStateCacheImpl.d.ts.map +0 -1
- package/lib/chain/stateCache/blockStateCacheImpl.js +0 -130
- package/lib/chain/stateCache/blockStateCacheImpl.js.map +0 -1
- package/lib/chain/stateCache/inMemoryCheckpointsCache.d.ts +0 -60
- package/lib/chain/stateCache/inMemoryCheckpointsCache.d.ts.map +0 -1
- package/lib/chain/stateCache/inMemoryCheckpointsCache.js +0 -156
- package/lib/chain/stateCache/inMemoryCheckpointsCache.js.map +0 -1
- package/lib/util/bytes.d.ts +0 -3
- package/lib/util/bytes.d.ts.map +0 -1
- package/lib/util/bytes.js +0 -11
- package/lib/util/bytes.js.map +0 -1
- package/src/chain/stateCache/blockStateCacheImpl.ts +0 -149
- package/src/chain/stateCache/inMemoryCheckpointsCache.ts +0 -192
- package/src/util/bytes.ts +0 -11
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
import { MapDef, toRootHex } from "@lodestar/utils";
|
|
2
|
-
import { MapTracker } from "./mapMetrics.js";
|
|
3
|
-
import { CacheItemType } from "./types.js";
|
|
4
|
-
const MAX_EPOCHS = 10;
|
|
5
|
-
/**
|
|
6
|
-
* In memory cache of CachedBeaconState
|
|
7
|
-
* belonging to checkpoint
|
|
8
|
-
*
|
|
9
|
-
* Similar API to Repository
|
|
10
|
-
*/
|
|
11
|
-
export class InMemoryCheckpointStateCache {
|
|
12
|
-
cache;
|
|
13
|
-
/** Epoch -> Set<blockRoot> */
|
|
14
|
-
epochIndex = new MapDef(() => new Set());
|
|
15
|
-
/**
|
|
16
|
-
* Max number of epochs allowed in the cache
|
|
17
|
-
*/
|
|
18
|
-
maxEpochs;
|
|
19
|
-
metrics;
|
|
20
|
-
preComputedCheckpoint = null;
|
|
21
|
-
preComputedCheckpointHits = null;
|
|
22
|
-
constructor({ metrics = null }, { maxEpochs = MAX_EPOCHS } = {}) {
|
|
23
|
-
this.cache = new MapTracker(metrics?.cpStateCache);
|
|
24
|
-
if (metrics) {
|
|
25
|
-
this.metrics = metrics.cpStateCache;
|
|
26
|
-
metrics.cpStateCache.size.addCollect(() => metrics.cpStateCache.size.set({ type: CacheItemType.inMemory }, this.cache.size));
|
|
27
|
-
metrics.cpStateCache.epochSize.addCollect(() => metrics.cpStateCache.epochSize.set({ type: CacheItemType.inMemory }, this.epochIndex.size));
|
|
28
|
-
}
|
|
29
|
-
this.maxEpochs = maxEpochs;
|
|
30
|
-
}
|
|
31
|
-
async getOrReload(cp) {
|
|
32
|
-
return this.get(cp);
|
|
33
|
-
}
|
|
34
|
-
async getStateOrBytes(cp) {
|
|
35
|
-
return this.get(cp);
|
|
36
|
-
}
|
|
37
|
-
async getOrReloadLatest(rootHex, maxEpoch) {
|
|
38
|
-
return this.getLatest(rootHex, maxEpoch);
|
|
39
|
-
}
|
|
40
|
-
async processState() {
|
|
41
|
-
// do nothing, this class does not support prunning
|
|
42
|
-
return 0;
|
|
43
|
-
}
|
|
44
|
-
get(cp) {
|
|
45
|
-
this.metrics?.lookups.inc();
|
|
46
|
-
const cpKey = toCheckpointKey(cp);
|
|
47
|
-
const item = this.cache.get(cpKey);
|
|
48
|
-
if (!item) {
|
|
49
|
-
return null;
|
|
50
|
-
}
|
|
51
|
-
this.metrics?.hits.inc();
|
|
52
|
-
if (cpKey === this.preComputedCheckpoint) {
|
|
53
|
-
this.preComputedCheckpointHits = (this.preComputedCheckpointHits ?? 0) + 1;
|
|
54
|
-
}
|
|
55
|
-
this.metrics?.stateClonedCount.observe(item.clonedCount);
|
|
56
|
-
return item;
|
|
57
|
-
}
|
|
58
|
-
add(cp, item) {
|
|
59
|
-
const cpHex = toCheckpointHex(cp);
|
|
60
|
-
const key = toCheckpointKey(cpHex);
|
|
61
|
-
if (this.cache.has(key)) {
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
this.metrics?.adds.inc();
|
|
65
|
-
this.cache.set(key, item);
|
|
66
|
-
this.epochIndex.getOrDefault(cp.epoch).add(cpHex.rootHex);
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Searches for the latest cached state with a `root`, starting with `epoch` and descending
|
|
70
|
-
*/
|
|
71
|
-
getLatest(rootHex, maxEpoch) {
|
|
72
|
-
// sort epochs in descending order, only consider epochs lte `epoch`
|
|
73
|
-
const epochs = Array.from(this.epochIndex.keys())
|
|
74
|
-
.sort((a, b) => b - a)
|
|
75
|
-
.filter((e) => e <= maxEpoch);
|
|
76
|
-
for (const epoch of epochs) {
|
|
77
|
-
if (this.epochIndex.get(epoch)?.has(rootHex)) {
|
|
78
|
-
return this.get({ rootHex, epoch });
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
return null;
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Update the precomputed checkpoint and return the number of his for the
|
|
85
|
-
* previous one (if any).
|
|
86
|
-
*/
|
|
87
|
-
updatePreComputedCheckpoint(rootHex, epoch) {
|
|
88
|
-
const previousHits = this.preComputedCheckpointHits;
|
|
89
|
-
this.preComputedCheckpoint = toCheckpointKey({ rootHex, epoch });
|
|
90
|
-
this.preComputedCheckpointHits = 0;
|
|
91
|
-
return previousHits;
|
|
92
|
-
}
|
|
93
|
-
pruneFinalized(finalizedEpoch) {
|
|
94
|
-
for (const epoch of this.epochIndex.keys()) {
|
|
95
|
-
if (epoch < finalizedEpoch) {
|
|
96
|
-
this.deleteAllEpochItems(epoch);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
prune(finalizedEpoch, justifiedEpoch) {
|
|
101
|
-
const epochs = Array.from(this.epochIndex.keys()).filter((epoch) => epoch !== finalizedEpoch && epoch !== justifiedEpoch);
|
|
102
|
-
if (epochs.length > this.maxEpochs) {
|
|
103
|
-
for (const epoch of epochs.slice(0, epochs.length - this.maxEpochs)) {
|
|
104
|
-
this.deleteAllEpochItems(epoch);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
delete(cp) {
|
|
109
|
-
this.cache.delete(toCheckpointKey(toCheckpointHex(cp)));
|
|
110
|
-
const epochKey = toRootHex(cp.root);
|
|
111
|
-
const value = this.epochIndex.get(cp.epoch);
|
|
112
|
-
if (value) {
|
|
113
|
-
value.delete(epochKey);
|
|
114
|
-
if (value.size === 0) {
|
|
115
|
-
this.epochIndex.delete(cp.epoch);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
deleteAllEpochItems(epoch) {
|
|
120
|
-
for (const rootHex of this.epochIndex.get(epoch) || []) {
|
|
121
|
-
this.cache.delete(toCheckpointKey({ rootHex, epoch }));
|
|
122
|
-
}
|
|
123
|
-
this.epochIndex.delete(epoch);
|
|
124
|
-
}
|
|
125
|
-
clear() {
|
|
126
|
-
this.cache.clear();
|
|
127
|
-
this.epochIndex.clear();
|
|
128
|
-
}
|
|
129
|
-
/** ONLY FOR DEBUGGING PURPOSES. For lodestar debug API */
|
|
130
|
-
dumpSummary() {
|
|
131
|
-
return Array.from(this.cache.entries()).map(([key, state]) => ({
|
|
132
|
-
slot: state.slot,
|
|
133
|
-
root: toRootHex(state.hashTreeRoot()),
|
|
134
|
-
reads: this.cache.readCount.get(key) ?? 0,
|
|
135
|
-
lastRead: this.cache.lastRead.get(key) ?? 0,
|
|
136
|
-
checkpointState: true,
|
|
137
|
-
}));
|
|
138
|
-
}
|
|
139
|
-
getStates() {
|
|
140
|
-
return this.cache.values();
|
|
141
|
-
}
|
|
142
|
-
/** ONLY FOR DEBUGGING PURPOSES. For spec tests on error */
|
|
143
|
-
dumpCheckpointKeys() {
|
|
144
|
-
return Array.from(this.cache.keys());
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
export function toCheckpointHex(checkpoint) {
|
|
148
|
-
return {
|
|
149
|
-
epoch: checkpoint.epoch,
|
|
150
|
-
rootHex: toRootHex(checkpoint.root),
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
export function toCheckpointKey(cp) {
|
|
154
|
-
return `${cp.rootHex}:${cp.epoch}`;
|
|
155
|
-
}
|
|
156
|
-
//# sourceMappingURL=inMemoryCheckpointsCache.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inMemoryCheckpointsCache.js","sourceRoot":"","sources":["../../../src/chain/stateCache/inMemoryCheckpointsCache.ts"],"names":[],"mappings":"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"}
|
package/lib/util/bytes.d.ts
DELETED
package/lib/util/bytes.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bytes.d.ts","sourceRoot":"","sources":["../../src/util/bytes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,iBAAiB,CAAC;AAErC,wBAAgB,eAAe,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,EAAE,CAAC,EAAE,UAAU,GAAG,IAAI,GAAG,OAAO,CAQnF"}
|
package/lib/util/bytes.js
DELETED
package/lib/util/bytes.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bytes.js","sourceRoot":"","sources":["../../src/util/bytes.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,eAAe,CAAC,CAAoB,EAAE,CAAoB;IACxE,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IAClC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
import {routes} from "@lodestar/api";
|
|
2
|
-
import {CachedBeaconStateAllForks} from "@lodestar/state-transition";
|
|
3
|
-
import {Epoch, RootHex} from "@lodestar/types";
|
|
4
|
-
import {toRootHex} from "@lodestar/utils";
|
|
5
|
-
import {Metrics} from "../../metrics/index.js";
|
|
6
|
-
import {MapTracker} from "./mapMetrics.js";
|
|
7
|
-
import {BlockStateCache} from "./types.js";
|
|
8
|
-
|
|
9
|
-
const MAX_STATES = 3 * 32;
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Old implementation of StateCache (used to call `StateContextCache`)
|
|
13
|
-
* - Prune per checkpoint so number of states ranges from 96 to 128
|
|
14
|
-
* - Keep a separate head state to make sure it is always available
|
|
15
|
-
*/
|
|
16
|
-
export class BlockStateCacheImpl implements BlockStateCache {
|
|
17
|
-
/**
|
|
18
|
-
* Max number of states allowed in the cache
|
|
19
|
-
*/
|
|
20
|
-
readonly maxStates: number;
|
|
21
|
-
|
|
22
|
-
private readonly cache: MapTracker<string, CachedBeaconStateAllForks>;
|
|
23
|
-
/** Epoch -> Set<blockRoot> */
|
|
24
|
-
private readonly epochIndex = new Map<Epoch, Set<string>>();
|
|
25
|
-
private readonly metrics: Metrics["stateCache"] | null | undefined;
|
|
26
|
-
/**
|
|
27
|
-
* Strong reference to prevent head state from being pruned.
|
|
28
|
-
* null if head state is being regen and not available at the moment.
|
|
29
|
-
*/
|
|
30
|
-
private head: {state: CachedBeaconStateAllForks; stateRoot: RootHex} | null = null;
|
|
31
|
-
|
|
32
|
-
constructor({maxStates = MAX_STATES, metrics}: {maxStates?: number; metrics?: Metrics | null}) {
|
|
33
|
-
this.maxStates = maxStates;
|
|
34
|
-
this.cache = new MapTracker(metrics?.stateCache);
|
|
35
|
-
if (metrics) {
|
|
36
|
-
this.metrics = metrics.stateCache;
|
|
37
|
-
metrics.stateCache.size.addCollect(() => metrics.stateCache.size.set(this.cache.size));
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
get(rootHex: RootHex): CachedBeaconStateAllForks | null {
|
|
42
|
-
this.metrics?.lookups.inc();
|
|
43
|
-
const item = this.head?.stateRoot === rootHex ? this.head.state : this.cache.get(rootHex);
|
|
44
|
-
if (!item) {
|
|
45
|
-
return null;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
this.metrics?.hits.inc();
|
|
49
|
-
this.metrics?.stateClonedCount.observe(item.clonedCount);
|
|
50
|
-
|
|
51
|
-
return item;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
add(item: CachedBeaconStateAllForks): void {
|
|
55
|
-
const key = toRootHex(item.hashTreeRoot());
|
|
56
|
-
if (this.cache.get(key)) {
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
this.metrics?.adds.inc();
|
|
60
|
-
this.cache.set(key, item);
|
|
61
|
-
const epoch = item.epochCtx.epoch;
|
|
62
|
-
const blockRoots = this.epochIndex.get(epoch);
|
|
63
|
-
if (blockRoots) {
|
|
64
|
-
blockRoots.add(key);
|
|
65
|
-
} else {
|
|
66
|
-
this.epochIndex.set(epoch, new Set([key]));
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
setHeadState(item: CachedBeaconStateAllForks | null): void {
|
|
71
|
-
if (item) {
|
|
72
|
-
const key = toRootHex(item.hashTreeRoot());
|
|
73
|
-
this.head = {state: item, stateRoot: key};
|
|
74
|
-
} else {
|
|
75
|
-
this.head = null;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Get a seed state for state reload.
|
|
81
|
-
* This is to conform to the api only as this cache is not used in n-historical state.
|
|
82
|
-
* See ./fifoBlockStateCache.ts for implementation
|
|
83
|
-
*/
|
|
84
|
-
getSeedState(): CachedBeaconStateAllForks {
|
|
85
|
-
throw Error("Not implemented for BlockStateCacheImpl");
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
clear(): void {
|
|
89
|
-
this.cache.clear();
|
|
90
|
-
this.epochIndex.clear();
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
get size(): number {
|
|
94
|
-
return this.cache.size;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* TODO make this more robust.
|
|
99
|
-
* Without more thought, this currently breaks our assumptions about recent state availablity
|
|
100
|
-
*/
|
|
101
|
-
prune(headStateRootHex: RootHex): void {
|
|
102
|
-
const keys = Array.from(this.cache.keys());
|
|
103
|
-
if (keys.length > this.maxStates) {
|
|
104
|
-
// object keys are stored in insertion order, delete keys starting from the front
|
|
105
|
-
for (const key of keys.slice(0, keys.length - this.maxStates)) {
|
|
106
|
-
if (key !== headStateRootHex) {
|
|
107
|
-
const item = this.cache.get(key);
|
|
108
|
-
if (item) {
|
|
109
|
-
this.epochIndex.get(item.epochCtx.epoch)?.delete(key);
|
|
110
|
-
this.cache.delete(key);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* Prune per finalized epoch.
|
|
119
|
-
*/
|
|
120
|
-
deleteAllBeforeEpoch(finalizedEpoch: Epoch): void {
|
|
121
|
-
for (const epoch of this.epochIndex.keys()) {
|
|
122
|
-
if (epoch < finalizedEpoch) {
|
|
123
|
-
this.deleteAllEpochItems(epoch);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/** ONLY FOR DEBUGGING PURPOSES. For lodestar debug API */
|
|
129
|
-
dumpSummary(): routes.lodestar.StateCacheItem[] {
|
|
130
|
-
return Array.from(this.cache.entries()).map(([key, state]) => ({
|
|
131
|
-
slot: state.slot,
|
|
132
|
-
root: toRootHex(state.hashTreeRoot()),
|
|
133
|
-
reads: this.cache.readCount.get(key) ?? 0,
|
|
134
|
-
lastRead: this.cache.lastRead.get(key) ?? 0,
|
|
135
|
-
checkpointState: false,
|
|
136
|
-
}));
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
getStates(): IterableIterator<CachedBeaconStateAllForks> {
|
|
140
|
-
return this.cache.values();
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
private deleteAllEpochItems(epoch: Epoch): void {
|
|
144
|
-
for (const rootHex of this.epochIndex.get(epoch) || []) {
|
|
145
|
-
this.cache.delete(rootHex);
|
|
146
|
-
}
|
|
147
|
-
this.epochIndex.delete(epoch);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
import {routes} from "@lodestar/api";
|
|
2
|
-
import {CachedBeaconStateAllForks} from "@lodestar/state-transition";
|
|
3
|
-
import {Epoch, RootHex, phase0} from "@lodestar/types";
|
|
4
|
-
import {MapDef, toRootHex} from "@lodestar/utils";
|
|
5
|
-
import {Metrics} from "../../metrics/index.js";
|
|
6
|
-
import {MapTracker} from "./mapMetrics.js";
|
|
7
|
-
import {CacheItemType, CheckpointStateCache} from "./types.js";
|
|
8
|
-
|
|
9
|
-
export type CheckpointHex = {epoch: Epoch; rootHex: RootHex};
|
|
10
|
-
const MAX_EPOCHS = 10;
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* In memory cache of CachedBeaconState
|
|
14
|
-
* belonging to checkpoint
|
|
15
|
-
*
|
|
16
|
-
* Similar API to Repository
|
|
17
|
-
*/
|
|
18
|
-
export class InMemoryCheckpointStateCache implements CheckpointStateCache {
|
|
19
|
-
private readonly cache: MapTracker<string, CachedBeaconStateAllForks>;
|
|
20
|
-
/** Epoch -> Set<blockRoot> */
|
|
21
|
-
private readonly epochIndex = new MapDef<Epoch, Set<string>>(() => new Set<string>());
|
|
22
|
-
/**
|
|
23
|
-
* Max number of epochs allowed in the cache
|
|
24
|
-
*/
|
|
25
|
-
private readonly maxEpochs: number;
|
|
26
|
-
private readonly metrics: Metrics["cpStateCache"] | null | undefined;
|
|
27
|
-
private preComputedCheckpoint: string | null = null;
|
|
28
|
-
private preComputedCheckpointHits: number | null = null;
|
|
29
|
-
|
|
30
|
-
constructor({metrics = null}: {metrics?: Metrics | null}, {maxEpochs = MAX_EPOCHS}: {maxEpochs?: number} = {}) {
|
|
31
|
-
this.cache = new MapTracker(metrics?.cpStateCache);
|
|
32
|
-
if (metrics) {
|
|
33
|
-
this.metrics = metrics.cpStateCache;
|
|
34
|
-
metrics.cpStateCache.size.addCollect(() =>
|
|
35
|
-
metrics.cpStateCache.size.set({type: CacheItemType.inMemory}, this.cache.size)
|
|
36
|
-
);
|
|
37
|
-
metrics.cpStateCache.epochSize.addCollect(() =>
|
|
38
|
-
metrics.cpStateCache.epochSize.set({type: CacheItemType.inMemory}, this.epochIndex.size)
|
|
39
|
-
);
|
|
40
|
-
}
|
|
41
|
-
this.maxEpochs = maxEpochs;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
async getOrReload(cp: CheckpointHex): Promise<CachedBeaconStateAllForks | null> {
|
|
45
|
-
return this.get(cp);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
async getStateOrBytes(cp: CheckpointHex): Promise<Uint8Array | CachedBeaconStateAllForks | null> {
|
|
49
|
-
return this.get(cp);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
async getOrReloadLatest(rootHex: string, maxEpoch: number): Promise<CachedBeaconStateAllForks | null> {
|
|
53
|
-
return this.getLatest(rootHex, maxEpoch);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
async processState(): Promise<number> {
|
|
57
|
-
// do nothing, this class does not support prunning
|
|
58
|
-
return 0;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
get(cp: CheckpointHex): CachedBeaconStateAllForks | null {
|
|
62
|
-
this.metrics?.lookups.inc();
|
|
63
|
-
const cpKey = toCheckpointKey(cp);
|
|
64
|
-
const item = this.cache.get(cpKey);
|
|
65
|
-
|
|
66
|
-
if (!item) {
|
|
67
|
-
return null;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
this.metrics?.hits.inc();
|
|
71
|
-
|
|
72
|
-
if (cpKey === this.preComputedCheckpoint) {
|
|
73
|
-
this.preComputedCheckpointHits = (this.preComputedCheckpointHits ?? 0) + 1;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
this.metrics?.stateClonedCount.observe(item.clonedCount);
|
|
77
|
-
|
|
78
|
-
return item;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
add(cp: phase0.Checkpoint, item: CachedBeaconStateAllForks): void {
|
|
82
|
-
const cpHex = toCheckpointHex(cp);
|
|
83
|
-
const key = toCheckpointKey(cpHex);
|
|
84
|
-
if (this.cache.has(key)) {
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
this.metrics?.adds.inc();
|
|
88
|
-
this.cache.set(key, item);
|
|
89
|
-
this.epochIndex.getOrDefault(cp.epoch).add(cpHex.rootHex);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Searches for the latest cached state with a `root`, starting with `epoch` and descending
|
|
94
|
-
*/
|
|
95
|
-
getLatest(rootHex: RootHex, maxEpoch: Epoch): CachedBeaconStateAllForks | null {
|
|
96
|
-
// sort epochs in descending order, only consider epochs lte `epoch`
|
|
97
|
-
const epochs = Array.from(this.epochIndex.keys())
|
|
98
|
-
.sort((a, b) => b - a)
|
|
99
|
-
.filter((e) => e <= maxEpoch);
|
|
100
|
-
for (const epoch of epochs) {
|
|
101
|
-
if (this.epochIndex.get(epoch)?.has(rootHex)) {
|
|
102
|
-
return this.get({rootHex, epoch});
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
return null;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Update the precomputed checkpoint and return the number of his for the
|
|
110
|
-
* previous one (if any).
|
|
111
|
-
*/
|
|
112
|
-
updatePreComputedCheckpoint(rootHex: RootHex, epoch: Epoch): number | null {
|
|
113
|
-
const previousHits = this.preComputedCheckpointHits;
|
|
114
|
-
this.preComputedCheckpoint = toCheckpointKey({rootHex, epoch});
|
|
115
|
-
this.preComputedCheckpointHits = 0;
|
|
116
|
-
return previousHits;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
pruneFinalized(finalizedEpoch: Epoch): void {
|
|
120
|
-
for (const epoch of this.epochIndex.keys()) {
|
|
121
|
-
if (epoch < finalizedEpoch) {
|
|
122
|
-
this.deleteAllEpochItems(epoch);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
prune(finalizedEpoch: Epoch, justifiedEpoch: Epoch): void {
|
|
128
|
-
const epochs = Array.from(this.epochIndex.keys()).filter(
|
|
129
|
-
(epoch) => epoch !== finalizedEpoch && epoch !== justifiedEpoch
|
|
130
|
-
);
|
|
131
|
-
if (epochs.length > this.maxEpochs) {
|
|
132
|
-
for (const epoch of epochs.slice(0, epochs.length - this.maxEpochs)) {
|
|
133
|
-
this.deleteAllEpochItems(epoch);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
delete(cp: phase0.Checkpoint): void {
|
|
139
|
-
this.cache.delete(toCheckpointKey(toCheckpointHex(cp)));
|
|
140
|
-
const epochKey = toRootHex(cp.root);
|
|
141
|
-
const value = this.epochIndex.get(cp.epoch);
|
|
142
|
-
if (value) {
|
|
143
|
-
value.delete(epochKey);
|
|
144
|
-
if (value.size === 0) {
|
|
145
|
-
this.epochIndex.delete(cp.epoch);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
deleteAllEpochItems(epoch: Epoch): void {
|
|
151
|
-
for (const rootHex of this.epochIndex.get(epoch) || []) {
|
|
152
|
-
this.cache.delete(toCheckpointKey({rootHex, epoch}));
|
|
153
|
-
}
|
|
154
|
-
this.epochIndex.delete(epoch);
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
clear(): void {
|
|
158
|
-
this.cache.clear();
|
|
159
|
-
this.epochIndex.clear();
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
/** ONLY FOR DEBUGGING PURPOSES. For lodestar debug API */
|
|
163
|
-
dumpSummary(): routes.lodestar.StateCacheItem[] {
|
|
164
|
-
return Array.from(this.cache.entries()).map(([key, state]) => ({
|
|
165
|
-
slot: state.slot,
|
|
166
|
-
root: toRootHex(state.hashTreeRoot()),
|
|
167
|
-
reads: this.cache.readCount.get(key) ?? 0,
|
|
168
|
-
lastRead: this.cache.lastRead.get(key) ?? 0,
|
|
169
|
-
checkpointState: true,
|
|
170
|
-
}));
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
getStates(): IterableIterator<CachedBeaconStateAllForks> {
|
|
174
|
-
return this.cache.values();
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
/** ONLY FOR DEBUGGING PURPOSES. For spec tests on error */
|
|
178
|
-
dumpCheckpointKeys(): string[] {
|
|
179
|
-
return Array.from(this.cache.keys());
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
export function toCheckpointHex(checkpoint: phase0.Checkpoint): CheckpointHex {
|
|
184
|
-
return {
|
|
185
|
-
epoch: checkpoint.epoch,
|
|
186
|
-
rootHex: toRootHex(checkpoint.root),
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
export function toCheckpointKey(cp: CheckpointHex): string {
|
|
191
|
-
return `${cp.rootHex}:${cp.epoch}`;
|
|
192
|
-
}
|
package/src/util/bytes.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import {Root} from "@lodestar/types";
|
|
2
|
-
|
|
3
|
-
export function byteArrayEquals(a: Uint8Array | Root, b: Uint8Array | Root): boolean {
|
|
4
|
-
if (a.length !== b.length) {
|
|
5
|
-
return false;
|
|
6
|
-
}
|
|
7
|
-
for (let i = 0; i < a.length; i++) {
|
|
8
|
-
if (a[i] !== b[i]) return false;
|
|
9
|
-
}
|
|
10
|
-
return true;
|
|
11
|
-
}
|