@lodestar/beacon-node 1.39.0-dev.d4a47659a5 → 1.39.0-dev.dd21e36997
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/README.md +1 -1
- package/lib/api/impl/beacon/blocks/utils.js +1 -1
- package/lib/api/impl/beacon/blocks/utils.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/verifyBlocksExecutionPayloads.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +4 -2
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksSignatures.d.ts +2 -1
- package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksSignatures.js +3 -2
- package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
- package/lib/chain/chain.d.ts +8 -12
- package/lib/chain/chain.d.ts.map +1 -1
- package/lib/chain/chain.js +23 -47
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/forkChoice/index.d.ts.map +1 -1
- package/lib/chain/forkChoice/index.js +3 -3
- package/lib/chain/forkChoice/index.js.map +1 -1
- package/lib/chain/initState.d.ts +1 -14
- package/lib/chain/initState.d.ts.map +1 -1
- package/lib/chain/initState.js +1 -62
- package/lib/chain/initState.js.map +1 -1
- package/lib/chain/interface.d.ts +4 -9
- package/lib/chain/interface.d.ts.map +1 -1
- package/lib/chain/interface.js.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.d.ts +4 -4
- package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.js +4 -4
- package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
- package/lib/chain/opPools/opPool.d.ts +3 -0
- package/lib/chain/opPools/opPool.d.ts.map +1 -1
- package/lib/chain/opPools/opPool.js +9 -8
- package/lib/chain/opPools/opPool.js.map +1 -1
- package/lib/chain/prepareNextSlot.d.ts +0 -4
- package/lib/chain/prepareNextSlot.d.ts.map +1 -1
- package/lib/chain/prepareNextSlot.js +1 -21
- package/lib/chain/prepareNextSlot.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts +0 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +9 -12
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +4 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.js +4 -2
- package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
- package/lib/chain/validation/aggregateAndProof.js +9 -0
- package/lib/chain/validation/aggregateAndProof.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 +2 -3
- 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 +1 -1
- package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
- package/lib/chain/validation/dataColumnSidecar.js +2 -3
- package/lib/chain/validation/dataColumnSidecar.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/aggregateAndProof.js +1 -1
- package/lib/chain/validation/signatureSets/aggregateAndProof.js.map +1 -1
- package/lib/chain/validation/signatureSets/contributionAndProof.d.ts +2 -1
- package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/contributionAndProof.js +2 -2
- package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommittee.d.ts +2 -1
- package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommittee.js +2 -2
- package/lib/chain/validation/signatureSets/syncCommittee.js.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts +2 -1
- 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 -1
- package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js +1 -2
- 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 -3
- 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/db/beacon.d.ts +3 -7
- package/lib/db/beacon.d.ts.map +1 -1
- package/lib/db/beacon.js +33 -12
- package/lib/db/beacon.js.map +1 -1
- package/lib/db/buckets.d.ts +12 -6
- package/lib/db/buckets.d.ts.map +1 -1
- package/lib/db/buckets.js +6 -1
- package/lib/db/buckets.js.map +1 -1
- package/lib/db/interface.d.ts +2 -7
- package/lib/db/interface.d.ts.map +1 -1
- package/lib/db/repositories/index.d.ts +0 -3
- package/lib/db/repositories/index.d.ts.map +1 -1
- package/lib/db/repositories/index.js +0 -3
- package/lib/db/repositories/index.js.map +1 -1
- package/lib/execution/engine/http.d.ts +1 -1
- package/lib/execution/engine/http.d.ts.map +1 -1
- package/lib/execution/engine/http.js +2 -3
- package/lib/execution/engine/http.js.map +1 -1
- package/lib/execution/engine/index.d.ts.map +1 -1
- package/lib/execution/engine/index.js +1 -1
- package/lib/execution/engine/index.js.map +1 -1
- package/lib/execution/engine/interface.d.ts +1 -1
- package/lib/execution/engine/interface.d.ts.map +1 -1
- package/lib/execution/engine/interface.js.map +1 -1
- package/lib/{eth1/provider → execution/engine}/jsonRpcHttpClient.d.ts +1 -1
- package/lib/execution/engine/jsonRpcHttpClient.d.ts.map +1 -0
- package/lib/execution/engine/jsonRpcHttpClient.js.map +1 -0
- package/lib/execution/engine/jwt.d.ts.map +1 -0
- package/lib/execution/engine/jwt.js.map +1 -0
- package/lib/execution/engine/mock.d.ts.map +1 -1
- package/lib/execution/engine/mock.js +1 -1
- package/lib/execution/engine/mock.js.map +1 -1
- package/lib/execution/engine/payloadIdCache.d.ts +1 -1
- package/lib/execution/engine/payloadIdCache.d.ts.map +1 -1
- package/lib/execution/engine/types.d.ts +1 -1
- package/lib/execution/engine/types.d.ts.map +1 -1
- package/lib/execution/engine/types.js +1 -1
- package/lib/execution/engine/types.js.map +1 -1
- package/lib/execution/engine/utils.d.ts +64 -2
- package/lib/execution/engine/utils.d.ts.map +1 -1
- package/lib/execution/engine/utils.js +91 -2
- package/lib/execution/engine/utils.js.map +1 -1
- package/lib/index.d.ts +1 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -2
- package/lib/index.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +0 -35
- package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
- package/lib/metrics/metrics/lodestar.js +0 -90
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/network/peers/discover.d.ts.map +1 -1
- package/lib/network/peers/discover.js.map +1 -1
- package/lib/node/nodejs.d.ts +6 -3
- package/lib/node/nodejs.d.ts.map +1 -1
- package/lib/node/nodejs.js +13 -10
- package/lib/node/nodejs.js.map +1 -1
- package/lib/node/notifier.d.ts.map +1 -1
- package/lib/node/notifier.js +9 -6
- package/lib/node/notifier.js.map +1 -1
- package/lib/node/options.d.ts +0 -2
- package/lib/node/options.d.ts.map +1 -1
- package/lib/node/options.js +0 -2
- package/lib/node/options.js.map +1 -1
- package/lib/node/utils/interop/deposits.d.ts +2 -1
- package/lib/node/utils/interop/deposits.d.ts.map +1 -1
- package/lib/node/utils/interop/deposits.js.map +1 -1
- package/lib/node/utils/interop/state.d.ts +1 -1
- package/lib/node/utils/interop/state.d.ts.map +1 -1
- package/lib/node/utils/state.d.ts +1 -7
- package/lib/node/utils/state.d.ts.map +1 -1
- package/lib/node/utils/state.js +1 -14
- package/lib/node/utils/state.js.map +1 -1
- package/lib/sync/backfill/backfill.d.ts.map +1 -1
- package/lib/sync/backfill/backfill.js +2 -4
- package/lib/sync/backfill/backfill.js.map +1 -1
- package/lib/sync/backfill/verify.d.ts +2 -2
- package/lib/sync/backfill/verify.d.ts.map +1 -1
- package/lib/sync/backfill/verify.js +3 -3
- package/lib/sync/backfill/verify.js.map +1 -1
- package/package.json +28 -26
- package/src/api/impl/beacon/blocks/utils.ts +1 -1
- package/src/chain/blocks/verifyBlock.ts +1 -0
- package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +9 -2
- package/src/chain/blocks/verifyBlocksSignatures.ts +13 -3
- package/src/chain/chain.ts +33 -56
- package/src/chain/forkChoice/index.ts +3 -2
- package/src/chain/initState.ts +1 -97
- package/src/chain/interface.ts +4 -8
- package/src/chain/opPools/aggregatedAttestationPool.ts +7 -7
- package/src/chain/opPools/opPool.ts +8 -8
- package/src/chain/prepareNextSlot.ts +1 -28
- package/src/chain/produceBlock/produceBlockBody.ts +9 -13
- package/src/chain/stateCache/persistentCheckpointsCache.ts +15 -2
- package/src/chain/validation/aggregateAndProof.ts +12 -0
- package/src/chain/validation/attesterSlashing.ts +6 -1
- package/src/chain/validation/blobSidecar.ts +3 -3
- package/src/chain/validation/block.ts +3 -2
- package/src/chain/validation/blsToExecutionChange.ts +1 -1
- package/src/chain/validation/dataColumnSidecar.ts +3 -3
- package/src/chain/validation/proposerSlashing.ts +6 -1
- package/src/chain/validation/signatureSets/aggregateAndProof.ts +1 -1
- package/src/chain/validation/signatureSets/contributionAndProof.ts +3 -1
- package/src/chain/validation/signatureSets/syncCommittee.ts +3 -1
- package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +3 -1
- package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +2 -1
- package/src/chain/validation/syncCommittee.ts +1 -1
- package/src/chain/validation/syncCommitteeContributionAndProof.ts +8 -3
- package/src/chain/validation/voluntaryExit.ts +1 -1
- package/src/db/beacon.ts +38 -16
- package/src/db/buckets.ts +12 -7
- package/src/db/interface.ts +2 -13
- package/src/db/repositories/index.ts +0 -3
- package/src/execution/engine/http.ts +8 -9
- package/src/execution/engine/index.ts +1 -1
- package/src/execution/engine/interface.ts +1 -1
- package/src/{eth1/provider → execution/engine}/jsonRpcHttpClient.ts +1 -1
- package/src/execution/engine/mock.ts +1 -2
- package/src/execution/engine/payloadIdCache.ts +1 -1
- package/src/execution/engine/types.ts +9 -9
- package/src/execution/engine/utils.ts +111 -5
- package/src/index.ts +1 -2
- package/src/metrics/metrics/lodestar.ts +0 -92
- package/src/network/peers/discover.ts +3 -3
- package/src/node/nodejs.ts +20 -11
- package/src/node/notifier.ts +13 -7
- package/src/node/options.ts +0 -3
- package/src/node/utils/interop/deposits.ts +3 -1
- package/src/node/utils/interop/state.ts +1 -1
- package/src/node/utils/state.ts +3 -18
- package/src/sync/backfill/backfill.ts +2 -9
- package/src/sync/backfill/verify.ts +3 -8
- package/lib/chain/genesis/genesis.d.ts +0 -51
- package/lib/chain/genesis/genesis.d.ts.map +0 -1
- package/lib/chain/genesis/genesis.js +0 -123
- package/lib/chain/genesis/genesis.js.map +0 -1
- package/lib/chain/genesis/interface.d.ts +0 -13
- package/lib/chain/genesis/interface.d.ts.map +0 -1
- package/lib/chain/genesis/interface.js +0 -2
- package/lib/chain/genesis/interface.js.map +0 -1
- package/lib/chain/rewards/attestationsRewards.d.ts +0 -7
- package/lib/chain/rewards/attestationsRewards.d.ts.map +0 -1
- package/lib/chain/rewards/attestationsRewards.js +0 -112
- package/lib/chain/rewards/attestationsRewards.js.map +0 -1
- package/lib/chain/rewards/blockRewards.d.ts +0 -14
- package/lib/chain/rewards/blockRewards.d.ts.map +0 -1
- package/lib/chain/rewards/blockRewards.js +0 -94
- package/lib/chain/rewards/blockRewards.js.map +0 -1
- package/lib/chain/rewards/syncCommitteeRewards.d.ts +0 -6
- package/lib/chain/rewards/syncCommitteeRewards.d.ts.map +0 -1
- package/lib/chain/rewards/syncCommitteeRewards.js +0 -36
- package/lib/chain/rewards/syncCommitteeRewards.js.map +0 -1
- package/lib/db/repositories/depositDataRoot.d.ts +0 -22
- package/lib/db/repositories/depositDataRoot.d.ts.map +0 -1
- package/lib/db/repositories/depositDataRoot.js +0 -62
- package/lib/db/repositories/depositDataRoot.js.map +0 -1
- package/lib/db/repositories/depositEvent.d.ts +0 -13
- package/lib/db/repositories/depositEvent.d.ts.map +0 -1
- package/lib/db/repositories/depositEvent.js +0 -27
- package/lib/db/repositories/depositEvent.js.map +0 -1
- package/lib/db/repositories/eth1Data.d.ts +0 -13
- package/lib/db/repositories/eth1Data.d.ts.map +0 -1
- package/lib/db/repositories/eth1Data.js +0 -26
- package/lib/db/repositories/eth1Data.js.map +0 -1
- package/lib/db/single/index.d.ts +0 -3
- package/lib/db/single/index.d.ts.map +0 -1
- package/lib/db/single/index.js +0 -3
- package/lib/db/single/index.js.map +0 -1
- package/lib/db/single/preGenesisState.d.ts +0 -16
- package/lib/db/single/preGenesisState.d.ts.map +0 -1
- package/lib/db/single/preGenesisState.js +0 -29
- package/lib/db/single/preGenesisState.js.map +0 -1
- package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts +0 -14
- package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts.map +0 -1
- package/lib/db/single/preGenesisStateLastProcessedBlock.js +0 -27
- package/lib/db/single/preGenesisStateLastProcessedBlock.js.map +0 -1
- package/lib/eth1/errors.d.ts +0 -66
- package/lib/eth1/errors.d.ts.map +0 -1
- package/lib/eth1/errors.js +0 -27
- package/lib/eth1/errors.js.map +0 -1
- package/lib/eth1/eth1DataCache.d.ts +0 -19
- package/lib/eth1/eth1DataCache.d.ts.map +0 -1
- package/lib/eth1/eth1DataCache.js +0 -19
- package/lib/eth1/eth1DataCache.js.map +0 -1
- package/lib/eth1/eth1DepositDataTracker.d.ts +0 -80
- package/lib/eth1/eth1DepositDataTracker.d.ts.map +0 -1
- package/lib/eth1/eth1DepositDataTracker.js +0 -317
- package/lib/eth1/eth1DepositDataTracker.js.map +0 -1
- package/lib/eth1/eth1DepositsCache.d.ts +0 -42
- package/lib/eth1/eth1DepositsCache.d.ts.map +0 -1
- package/lib/eth1/eth1DepositsCache.js +0 -119
- package/lib/eth1/eth1DepositsCache.js.map +0 -1
- package/lib/eth1/index.d.ts +0 -31
- package/lib/eth1/index.d.ts.map +0 -1
- package/lib/eth1/index.js +0 -71
- package/lib/eth1/index.js.map +0 -1
- package/lib/eth1/interface.d.ts +0 -74
- package/lib/eth1/interface.d.ts.map +0 -1
- package/lib/eth1/interface.js +0 -8
- package/lib/eth1/interface.js.map +0 -1
- package/lib/eth1/options.d.ts +0 -22
- package/lib/eth1/options.d.ts.map +0 -1
- package/lib/eth1/options.js +0 -8
- package/lib/eth1/options.js.map +0 -1
- package/lib/eth1/provider/eth1Provider.d.ts +0 -39
- package/lib/eth1/provider/eth1Provider.d.ts.map +0 -1
- package/lib/eth1/provider/eth1Provider.js +0 -147
- package/lib/eth1/provider/eth1Provider.js.map +0 -1
- package/lib/eth1/provider/jsonRpcHttpClient.d.ts.map +0 -1
- package/lib/eth1/provider/jsonRpcHttpClient.js.map +0 -1
- package/lib/eth1/provider/jwt.d.ts.map +0 -1
- package/lib/eth1/provider/jwt.js.map +0 -1
- package/lib/eth1/provider/utils.d.ts +0 -65
- package/lib/eth1/provider/utils.d.ts.map +0 -1
- package/lib/eth1/provider/utils.js +0 -120
- package/lib/eth1/provider/utils.js.map +0 -1
- package/lib/eth1/stream.d.ts +0 -15
- package/lib/eth1/stream.d.ts.map +0 -1
- package/lib/eth1/stream.js +0 -54
- package/lib/eth1/stream.js.map +0 -1
- package/lib/eth1/utils/depositContract.d.ts +0 -14
- package/lib/eth1/utils/depositContract.d.ts.map +0 -1
- package/lib/eth1/utils/depositContract.js +0 -33
- package/lib/eth1/utils/depositContract.js.map +0 -1
- package/lib/eth1/utils/deposits.d.ts +0 -8
- package/lib/eth1/utils/deposits.d.ts.map +0 -1
- package/lib/eth1/utils/deposits.js +0 -47
- package/lib/eth1/utils/deposits.js.map +0 -1
- package/lib/eth1/utils/eth1Data.d.ts +0 -22
- package/lib/eth1/utils/eth1Data.d.ts.map +0 -1
- package/lib/eth1/utils/eth1Data.js +0 -77
- package/lib/eth1/utils/eth1Data.js.map +0 -1
- package/lib/eth1/utils/eth1DepositEvent.d.ts +0 -7
- package/lib/eth1/utils/eth1DepositEvent.d.ts.map +0 -1
- package/lib/eth1/utils/eth1DepositEvent.js +0 -13
- package/lib/eth1/utils/eth1DepositEvent.js.map +0 -1
- package/lib/eth1/utils/eth1Vote.d.ts +0 -17
- package/lib/eth1/utils/eth1Vote.d.ts.map +0 -1
- package/lib/eth1/utils/eth1Vote.js +0 -111
- package/lib/eth1/utils/eth1Vote.js.map +0 -1
- package/lib/eth1/utils/groupDepositEventsByBlock.d.ts +0 -9
- package/lib/eth1/utils/groupDepositEventsByBlock.d.ts.map +0 -1
- package/lib/eth1/utils/groupDepositEventsByBlock.js +0 -17
- package/lib/eth1/utils/groupDepositEventsByBlock.js.map +0 -1
- package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts +0 -10
- package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts.map +0 -1
- package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.js +0 -14
- package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.js.map +0 -1
- package/src/chain/genesis/genesis.ts +0 -190
- package/src/chain/genesis/interface.ts +0 -14
- package/src/chain/rewards/attestationsRewards.ts +0 -197
- package/src/chain/rewards/blockRewards.ts +0 -150
- package/src/chain/rewards/syncCommitteeRewards.ts +0 -58
- package/src/db/repositories/depositDataRoot.ts +0 -80
- package/src/db/repositories/depositEvent.ts +0 -32
- package/src/db/repositories/eth1Data.ts +0 -33
- package/src/db/single/index.ts +0 -2
- package/src/db/single/preGenesisState.ts +0 -37
- package/src/db/single/preGenesisStateLastProcessedBlock.ts +0 -34
- package/src/eth1/errors.ts +0 -40
- package/src/eth1/eth1DataCache.ts +0 -26
- package/src/eth1/eth1DepositDataTracker.ts +0 -410
- package/src/eth1/eth1DepositsCache.ts +0 -141
- package/src/eth1/index.ts +0 -94
- package/src/eth1/interface.ts +0 -87
- package/src/eth1/options.ts +0 -28
- package/src/eth1/provider/eth1Provider.ts +0 -229
- package/src/eth1/provider/utils.ts +0 -136
- package/src/eth1/stream.ts +0 -75
- package/src/eth1/utils/depositContract.ts +0 -37
- package/src/eth1/utils/deposits.ts +0 -70
- package/src/eth1/utils/eth1Data.ts +0 -100
- package/src/eth1/utils/eth1DepositEvent.ts +0 -12
- package/src/eth1/utils/eth1Vote.ts +0 -142
- package/src/eth1/utils/groupDepositEventsByBlock.ts +0 -19
- package/src/eth1/utils/optimizeNextBlockDiffForGenesis.ts +0 -18
- /package/lib/{eth1/provider → execution/engine}/jsonRpcHttpClient.js +0 -0
- /package/lib/{eth1/provider → execution/engine}/jwt.d.ts +0 -0
- /package/lib/{eth1/provider → execution/engine}/jwt.js +0 -0
- /package/src/{eth1/provider → execution/engine}/jwt.ts +0 -0
|
@@ -45,7 +45,7 @@ import {
|
|
|
45
45
|
} from "@lodestar/types";
|
|
46
46
|
import {Logger, sleep, toHex, toPubkeyHex, toRootHex} from "@lodestar/utils";
|
|
47
47
|
import {ZERO_HASH_HEX} from "../../constants/index.js";
|
|
48
|
-
import {numToQuantity} from "../../
|
|
48
|
+
import {numToQuantity} from "../../execution/engine/utils.js";
|
|
49
49
|
import {
|
|
50
50
|
IExecutionBuilder,
|
|
51
51
|
IExecutionEngine,
|
|
@@ -78,7 +78,6 @@ export enum BlockProductionStep {
|
|
|
78
78
|
voluntaryExits = "voluntaryExits",
|
|
79
79
|
blsToExecutionChanges = "blsToExecutionChanges",
|
|
80
80
|
attestations = "attestations",
|
|
81
|
-
eth1DataAndDeposits = "eth1DataAndDeposits",
|
|
82
81
|
syncAggregate = "syncAggregate",
|
|
83
82
|
executionPayload = "executionPayload",
|
|
84
83
|
}
|
|
@@ -166,7 +165,7 @@ export async function produceBlockBody<T extends BlockType>(
|
|
|
166
165
|
// even though shouldOverrideBuilder is relevant for the engine response, for simplicity of typing
|
|
167
166
|
// we just return it undefined for the builder which anyway doesn't get consumed downstream
|
|
168
167
|
let shouldOverrideBuilder: boolean | undefined;
|
|
169
|
-
const fork =
|
|
168
|
+
const fork = this.config.getForkName(blockSlot);
|
|
170
169
|
const produceResult = {
|
|
171
170
|
type: blockType,
|
|
172
171
|
fork,
|
|
@@ -624,7 +623,7 @@ function preparePayloadAttributes(
|
|
|
624
623
|
(payloadAttributes as capella.SSEPayloadAttributes["payloadAttributes"]).withdrawals = getExpectedWithdrawals(
|
|
625
624
|
ForkSeq[fork],
|
|
626
625
|
prepareState as CachedBeaconStateCapella
|
|
627
|
-
).
|
|
626
|
+
).expectedWithdrawals;
|
|
628
627
|
}
|
|
629
628
|
|
|
630
629
|
if (ForkSeq[fork] >= ForkSeq.deneb) {
|
|
@@ -645,7 +644,7 @@ export async function produceCommonBlockBody<T extends BlockType>(
|
|
|
645
644
|
? this.metrics?.executionBlockProductionTimeSteps
|
|
646
645
|
: this.metrics?.builderBlockProductionTimeSteps;
|
|
647
646
|
|
|
648
|
-
const fork =
|
|
647
|
+
const fork = this.config.getForkName(slot);
|
|
649
648
|
|
|
650
649
|
// TODO:
|
|
651
650
|
// Iterate through the naive aggregation pool and ensure all the attestations from there
|
|
@@ -667,20 +666,17 @@ export async function produceCommonBlockBody<T extends BlockType>(
|
|
|
667
666
|
step: BlockProductionStep.attestations,
|
|
668
667
|
});
|
|
669
668
|
|
|
670
|
-
const endEth1DataAndDeposits = stepsMetrics?.startTimer();
|
|
671
|
-
const {eth1Data, deposits} = await this.eth1.getEth1DataAndDeposits(currentState);
|
|
672
|
-
endEth1DataAndDeposits?.({
|
|
673
|
-
step: BlockProductionStep.eth1DataAndDeposits,
|
|
674
|
-
});
|
|
675
|
-
|
|
676
669
|
const blockBody: Omit<CommonBlockBody, "blsToExecutionChanges" | "syncAggregate"> = {
|
|
677
670
|
randaoReveal,
|
|
678
671
|
graffiti,
|
|
679
|
-
|
|
672
|
+
// Eth1 data voting is no longer required since electra
|
|
673
|
+
eth1Data: currentState.eth1Data,
|
|
680
674
|
proposerSlashings,
|
|
681
675
|
attesterSlashings,
|
|
682
676
|
attestations,
|
|
683
|
-
deposits,
|
|
677
|
+
// Since electra, deposits are processed by the execution layer,
|
|
678
|
+
// we no longer support handling deposits from earlier forks.
|
|
679
|
+
deposits: [],
|
|
684
680
|
voluntaryExits,
|
|
685
681
|
};
|
|
686
682
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {routes} from "@lodestar/api";
|
|
2
|
+
import {BeaconConfig} from "@lodestar/config";
|
|
2
3
|
import {
|
|
3
4
|
CachedBeaconStateAllForks,
|
|
4
5
|
computeStartSlotAtEpoch,
|
|
@@ -24,6 +25,7 @@ export type PersistentCheckpointStateCacheOpts = {
|
|
|
24
25
|
};
|
|
25
26
|
|
|
26
27
|
type PersistentCheckpointStateCacheModules = {
|
|
28
|
+
config: BeaconConfig;
|
|
27
29
|
metrics?: Metrics | null;
|
|
28
30
|
logger: Logger;
|
|
29
31
|
clock?: IClock | null;
|
|
@@ -107,6 +109,7 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
|
|
|
107
109
|
private readonly cache: MapTracker<CacheKey, CacheItem>;
|
|
108
110
|
/** Epoch -> Set<blockRoot> */
|
|
109
111
|
private readonly epochIndex = new MapDef<Epoch, Set<RootHex>>(() => new Set<string>());
|
|
112
|
+
private readonly config: BeaconConfig;
|
|
110
113
|
private readonly metrics: Metrics | null | undefined;
|
|
111
114
|
private readonly logger: Logger;
|
|
112
115
|
private readonly clock: IClock | null | undefined;
|
|
@@ -120,10 +123,20 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
|
|
|
120
123
|
private readonly bufferPool?: BufferPool | null;
|
|
121
124
|
|
|
122
125
|
constructor(
|
|
123
|
-
{
|
|
126
|
+
{
|
|
127
|
+
config,
|
|
128
|
+
metrics,
|
|
129
|
+
logger,
|
|
130
|
+
clock,
|
|
131
|
+
signal,
|
|
132
|
+
datastore,
|
|
133
|
+
blockStateCache,
|
|
134
|
+
bufferPool,
|
|
135
|
+
}: PersistentCheckpointStateCacheModules,
|
|
124
136
|
opts: PersistentCheckpointStateCacheOpts
|
|
125
137
|
) {
|
|
126
138
|
this.cache = new MapTracker(metrics?.cpStateCache);
|
|
139
|
+
this.config = config;
|
|
127
140
|
if (metrics) {
|
|
128
141
|
this.metrics = metrics;
|
|
129
142
|
metrics.cpStateCache.size.addCollect(() => {
|
|
@@ -484,7 +497,7 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
|
|
|
484
497
|
}
|
|
485
498
|
|
|
486
499
|
const blockSlot = state.slot;
|
|
487
|
-
const processCPStatesTimeMs =
|
|
500
|
+
const processCPStatesTimeMs = this.config.getSlotComponentDurationMs(PROCESS_CHECKPOINT_STATES_BPS);
|
|
488
501
|
// we always have clock in production, fallback value is only for test
|
|
489
502
|
const msFromSlot = this.clock?.msFromSlot(blockSlot) ?? processCPStatesTimeMs;
|
|
490
503
|
const msToProcessCPStates = processCPStatesTimeMs - msFromSlot;
|
|
@@ -245,6 +245,18 @@ async function validateAggregateAndProof(
|
|
|
245
245
|
});
|
|
246
246
|
}
|
|
247
247
|
|
|
248
|
+
// Same race-condition check as above for seen aggregators
|
|
249
|
+
if (
|
|
250
|
+
!skipValidationKnownAttesters &&
|
|
251
|
+
chain.seenAggregatedAttestations.isKnown(targetEpoch, attIndex, attDataRootHex, aggregationBits)
|
|
252
|
+
) {
|
|
253
|
+
throw new AttestationError(GossipAction.IGNORE, {
|
|
254
|
+
code: AttestationErrorCode.ATTESTERS_ALREADY_KNOWN,
|
|
255
|
+
targetEpoch,
|
|
256
|
+
aggregateRoot: attDataRootHex,
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
|
|
248
260
|
chain.seenAggregators.add(targetEpoch, aggregatorIndex);
|
|
249
261
|
chain.seenAggregatedAttestations.add(
|
|
250
262
|
targetEpoch,
|
|
@@ -51,7 +51,12 @@ export async function validateAttesterSlashing(
|
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
const signatureSets = getAttesterSlashingSignatureSets(
|
|
54
|
+
const signatureSets = getAttesterSlashingSignatureSets(
|
|
55
|
+
chain.config,
|
|
56
|
+
chain.index2pubkey,
|
|
57
|
+
state.slot,
|
|
58
|
+
attesterSlashing
|
|
59
|
+
);
|
|
55
60
|
if (!(await chain.bls.verifySignatureSets(signatureSets, {batchable: true, priority: prioritizeBls}))) {
|
|
56
61
|
throw new AttesterSlashingError(GossipAction.REJECT, {
|
|
57
62
|
code: AttesterSlashingErrorCode.INVALID,
|
|
@@ -138,8 +138,9 @@ export async function validateGossipBlobSidecar(
|
|
|
138
138
|
const signature = blobSidecar.signedBlockHeader.signature;
|
|
139
139
|
if (!chain.seenBlockInputCache.isVerifiedProposerSignature(blobSlot, blockHex, signature)) {
|
|
140
140
|
const signatureSet = getBlockHeaderProposerSignatureSetByParentStateSlot(
|
|
141
|
+
chain.config,
|
|
141
142
|
chain.index2pubkey,
|
|
142
|
-
blockState,
|
|
143
|
+
blockState.slot,
|
|
143
144
|
blobSidecar.signedBlockHeader
|
|
144
145
|
);
|
|
145
146
|
// Don't batch so verification is not delayed
|
|
@@ -243,10 +244,9 @@ export async function validateBlockBlobSidecars(
|
|
|
243
244
|
const blockRootHex = toRootHex(blockRoot);
|
|
244
245
|
const signature = firstSidecarSignedBlockHeader.signature;
|
|
245
246
|
if (!chain.seenBlockInputCache.isVerifiedProposerSignature(blockSlot, blockRootHex, signature)) {
|
|
246
|
-
const headState = await chain.getHeadState();
|
|
247
247
|
const signatureSet = getBlockHeaderProposerSignatureSetByHeaderSlot(
|
|
248
|
+
chain.config,
|
|
248
249
|
chain.index2pubkey,
|
|
249
|
-
headState,
|
|
250
250
|
firstSidecarSignedBlockHeader
|
|
251
251
|
);
|
|
252
252
|
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
computeTimeAtSlot,
|
|
7
7
|
getBlockProposerSignatureSet,
|
|
8
8
|
isExecutionBlockBodyType,
|
|
9
|
+
isExecutionEnabled,
|
|
9
10
|
isExecutionStateType,
|
|
10
11
|
} from "@lodestar/state-transition";
|
|
11
12
|
import {SignedBeaconBlock, deneb} from "@lodestar/types";
|
|
@@ -139,7 +140,7 @@ export async function validateGossipBlock(
|
|
|
139
140
|
if (fork === ForkName.bellatrix) {
|
|
140
141
|
if (!isExecutionBlockBodyType(block.body)) throw Error("Not merge block type");
|
|
141
142
|
const executionPayload = block.body.executionPayload;
|
|
142
|
-
if (isExecutionStateType(blockState)) {
|
|
143
|
+
if (isExecutionStateType(blockState) && isExecutionEnabled(blockState, block)) {
|
|
143
144
|
const expectedTimestamp = computeTimeAtSlot(config, blockSlot, chain.genesisTime);
|
|
144
145
|
if (executionPayload.timestamp !== computeTimeAtSlot(config, blockSlot, chain.genesisTime)) {
|
|
145
146
|
throw new BlockGossipError(GossipAction.REJECT, {
|
|
@@ -153,7 +154,7 @@ export async function validateGossipBlock(
|
|
|
153
154
|
|
|
154
155
|
// [REJECT] The proposer signature, signed_beacon_block.signature, is valid with respect to the proposer_index pubkey.
|
|
155
156
|
if (!chain.seenBlockInputCache.isVerifiedProposerSignature(blockSlot, blockRoot, signedBlock.signature)) {
|
|
156
|
-
const signatureSet = getBlockProposerSignatureSet(chain.
|
|
157
|
+
const signatureSet = getBlockProposerSignatureSet(chain.config, chain.index2pubkey, signedBlock);
|
|
157
158
|
// Don't batch so verification is not delayed
|
|
158
159
|
if (!(await chain.bls.verifySignatureSets([signatureSet], {verifyOnMainThread: true}))) {
|
|
159
160
|
throw new BlockGossipError(GossipAction.REJECT, {
|
|
@@ -41,7 +41,7 @@ async function validateBlsToExecutionChange(
|
|
|
41
41
|
// NOTE: No need to advance head state since the signature's fork is handled with `broadcastedOnFork`,
|
|
42
42
|
// and chanes relevant to `isValidBlsToExecutionChange()` happen only on processBlock(), not processEpoch()
|
|
43
43
|
const state = chain.getHeadState();
|
|
44
|
-
const {config} =
|
|
44
|
+
const {config} = chain;
|
|
45
45
|
|
|
46
46
|
// [REJECT] All of the conditions within process_bls_to_execution_change pass validation.
|
|
47
47
|
// verifySignature = false, verified in batch below
|
|
@@ -135,8 +135,9 @@ export async function validateGossipDataColumnSidecar(
|
|
|
135
135
|
const signature = dataColumnSidecar.signedBlockHeader.signature;
|
|
136
136
|
if (!chain.seenBlockInputCache.isVerifiedProposerSignature(blockHeader.slot, blockRootHex, signature)) {
|
|
137
137
|
const signatureSet = getBlockHeaderProposerSignatureSetByParentStateSlot(
|
|
138
|
+
chain.config,
|
|
138
139
|
chain.index2pubkey,
|
|
139
|
-
blockState,
|
|
140
|
+
blockState.slot,
|
|
140
141
|
dataColumnSidecar.signedBlockHeader
|
|
141
142
|
);
|
|
142
143
|
|
|
@@ -336,10 +337,9 @@ export async function validateBlockDataColumnSidecars(
|
|
|
336
337
|
const slot = firstSidecarSignedBlockHeader.message.slot;
|
|
337
338
|
const signature = firstSidecarSignedBlockHeader.signature;
|
|
338
339
|
if (!chain.seenBlockInputCache.isVerifiedProposerSignature(slot, rootHex, signature)) {
|
|
339
|
-
const headState = await chain.getHeadState();
|
|
340
340
|
const signatureSet = getBlockHeaderProposerSignatureSetByHeaderSlot(
|
|
341
|
+
chain.config,
|
|
341
342
|
chain.index2pubkey,
|
|
342
|
-
headState,
|
|
343
343
|
firstSidecarSignedBlockHeader
|
|
344
344
|
);
|
|
345
345
|
|
|
@@ -44,7 +44,12 @@ async function validateProposerSlashing(
|
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
const signatureSets = getProposerSlashingSignatureSets(
|
|
47
|
+
const signatureSets = getProposerSlashingSignatureSets(
|
|
48
|
+
chain.config,
|
|
49
|
+
chain.index2pubkey,
|
|
50
|
+
state.slot,
|
|
51
|
+
proposerSlashing
|
|
52
|
+
);
|
|
48
53
|
if (!(await chain.bls.verifySignatureSets(signatureSets, {batchable: true, priority: prioritizeBls}))) {
|
|
49
54
|
throw new ProposerSlashingError(GossipAction.REJECT, {
|
|
50
55
|
code: ProposerSlashingErrorCode.INVALID,
|
|
@@ -14,7 +14,7 @@ export function getAggregateAndProofSigningRoot(
|
|
|
14
14
|
epoch: Epoch,
|
|
15
15
|
aggregateAndProof: SignedAggregateAndProof
|
|
16
16
|
): Uint8Array {
|
|
17
|
-
// previously, we call `const aggregatorDomain =
|
|
17
|
+
// previously, we call `const aggregatorDomain = config.getDomain(state.slot, DOMAIN_AGGREGATE_AND_PROOF, slot);`
|
|
18
18
|
// at fork boundary, it's required to dial to target epoch https://github.com/ChainSafe/lodestar/blob/v1.11.3/packages/beacon-node/src/chain/validation/attestation.ts#L573
|
|
19
19
|
// instead of that, just use the fork of slot in the attestation data
|
|
20
20
|
const slot = computeStartSlotAtEpoch(epoch);
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import {BeaconConfig} from "@lodestar/config";
|
|
1
2
|
import {DOMAIN_CONTRIBUTION_AND_PROOF} from "@lodestar/params";
|
|
2
3
|
import {
|
|
3
4
|
CachedBeaconStateAllForks,
|
|
@@ -9,11 +10,12 @@ import {
|
|
|
9
10
|
import {altair, ssz} from "@lodestar/types";
|
|
10
11
|
|
|
11
12
|
export function getContributionAndProofSignatureSet(
|
|
13
|
+
config: BeaconConfig,
|
|
12
14
|
index2pubkey: Index2PubkeyCache,
|
|
13
15
|
state: CachedBeaconStateAllForks,
|
|
14
16
|
signedContributionAndProof: altair.SignedContributionAndProof
|
|
15
17
|
): ISignatureSet {
|
|
16
|
-
const domain =
|
|
18
|
+
const domain = config.getDomain(
|
|
17
19
|
state.slot,
|
|
18
20
|
DOMAIN_CONTRIBUTION_AND_PROOF,
|
|
19
21
|
signedContributionAndProof.message.contribution.slot
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import {BeaconConfig} from "@lodestar/config";
|
|
1
2
|
import {DOMAIN_SYNC_COMMITTEE} from "@lodestar/params";
|
|
2
3
|
import {
|
|
3
4
|
CachedBeaconStateAllForks,
|
|
@@ -9,11 +10,12 @@ import {
|
|
|
9
10
|
import {altair, ssz} from "@lodestar/types";
|
|
10
11
|
|
|
11
12
|
export function getSyncCommitteeSignatureSet(
|
|
13
|
+
config: BeaconConfig,
|
|
12
14
|
index2pubkey: Index2PubkeyCache,
|
|
13
15
|
state: CachedBeaconStateAllForks,
|
|
14
16
|
syncCommittee: altair.SyncCommitteeMessage
|
|
15
17
|
): ISignatureSet {
|
|
16
|
-
const domain =
|
|
18
|
+
const domain = config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE, syncCommittee.slot);
|
|
17
19
|
|
|
18
20
|
return {
|
|
19
21
|
type: SignatureSetType.single,
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import {PublicKey} from "@chainsafe/blst";
|
|
2
|
+
import {BeaconConfig} from "@lodestar/config";
|
|
2
3
|
import {DOMAIN_SYNC_COMMITTEE} from "@lodestar/params";
|
|
3
4
|
import {CachedBeaconStateAltair, ISignatureSet, SignatureSetType, computeSigningRoot} from "@lodestar/state-transition";
|
|
4
5
|
import {altair, ssz} from "@lodestar/types";
|
|
5
6
|
|
|
6
7
|
export function getSyncCommitteeContributionSignatureSet(
|
|
8
|
+
config: BeaconConfig,
|
|
7
9
|
state: CachedBeaconStateAltair,
|
|
8
10
|
contribution: altair.SyncCommitteeContribution,
|
|
9
11
|
pubkeys: PublicKey[]
|
|
10
12
|
): ISignatureSet {
|
|
11
|
-
const domain =
|
|
13
|
+
const domain = config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE, contribution.slot);
|
|
12
14
|
return {
|
|
13
15
|
type: SignatureSetType.aggregate,
|
|
14
16
|
pubkeys,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import {BeaconConfig} from "@lodestar/config";
|
|
1
2
|
import {DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF} from "@lodestar/params";
|
|
2
3
|
import {
|
|
3
4
|
CachedBeaconStateAllForks,
|
|
@@ -9,11 +10,11 @@ import {
|
|
|
9
10
|
import {altair, ssz} from "@lodestar/types";
|
|
10
11
|
|
|
11
12
|
export function getSyncCommitteeSelectionProofSignatureSet(
|
|
13
|
+
config: BeaconConfig,
|
|
12
14
|
index2pubkey: Index2PubkeyCache,
|
|
13
15
|
state: CachedBeaconStateAllForks,
|
|
14
16
|
contributionAndProof: altair.ContributionAndProof
|
|
15
17
|
): ISignatureSet {
|
|
16
|
-
const {config} = state;
|
|
17
18
|
const slot = contributionAndProof.contribution.slot;
|
|
18
19
|
const domain = config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF, slot);
|
|
19
20
|
const signingData: altair.SyncAggregatorSelectionData = {
|
|
@@ -89,7 +89,7 @@ async function validateSyncCommitteeSigOnly(
|
|
|
89
89
|
syncCommittee: altair.SyncCommitteeMessage,
|
|
90
90
|
prioritizeBls = false
|
|
91
91
|
): Promise<void> {
|
|
92
|
-
const signatureSet = getSyncCommitteeSignatureSet(chain.index2pubkey, headState, syncCommittee);
|
|
92
|
+
const signatureSet = getSyncCommitteeSignatureSet(chain.config, chain.index2pubkey, headState, syncCommittee);
|
|
93
93
|
if (!(await chain.bls.verifySignatureSets([signatureSet], {batchable: true, priority: prioritizeBls}))) {
|
|
94
94
|
throw new SyncCommitteeError(GossipAction.REJECT, {
|
|
95
95
|
code: SyncCommitteeErrorCode.INVALID_SIGNATURE,
|
|
@@ -78,14 +78,19 @@ export async function validateSyncCommitteeGossipContributionAndProof(
|
|
|
78
78
|
const signatureSets = [
|
|
79
79
|
// [REJECT] The contribution_and_proof.selection_proof is a valid signature of the SyncAggregatorSelectionData
|
|
80
80
|
// derived from the contribution by the validator with index contribution_and_proof.aggregator_index.
|
|
81
|
-
getSyncCommitteeSelectionProofSignatureSet(index2pubkey, headState, contributionAndProof),
|
|
81
|
+
getSyncCommitteeSelectionProofSignatureSet(chain.config, index2pubkey, headState, contributionAndProof),
|
|
82
82
|
|
|
83
83
|
// [REJECT] The aggregator signature, signed_contribution_and_proof.signature, is valid.
|
|
84
|
-
getContributionAndProofSignatureSet(index2pubkey, headState, signedContributionAndProof),
|
|
84
|
+
getContributionAndProofSignatureSet(chain.config, index2pubkey, headState, signedContributionAndProof),
|
|
85
85
|
|
|
86
86
|
// [REJECT] The aggregate signature is valid for the message beacon_block_root and aggregate pubkey derived from
|
|
87
87
|
// the participation info in aggregation_bits for the subcommittee specified by the contribution.subcommittee_index.
|
|
88
|
-
getSyncCommitteeContributionSignatureSet(
|
|
88
|
+
getSyncCommitteeContributionSignatureSet(
|
|
89
|
+
chain.config,
|
|
90
|
+
headState as CachedBeaconStateAltair,
|
|
91
|
+
contribution,
|
|
92
|
+
participantPubkeys
|
|
93
|
+
),
|
|
89
94
|
];
|
|
90
95
|
|
|
91
96
|
if (!(await chain.bls.verifySignatureSets(signatureSets, {batchable: true}))) {
|
|
@@ -59,7 +59,7 @@ async function validateVoluntaryExit(
|
|
|
59
59
|
});
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
const signatureSet = getVoluntaryExitSignatureSet(chain.index2pubkey, state, voluntaryExit);
|
|
62
|
+
const signatureSet = getVoluntaryExitSignatureSet(chain.config, chain.index2pubkey, state.slot, voluntaryExit);
|
|
63
63
|
if (!(await chain.bls.verifySignatureSets([signatureSet], {batchable: true, priority: prioritizeBls}))) {
|
|
64
64
|
throw new VoluntaryExitError(GossipAction.REJECT, {
|
|
65
65
|
code: VoluntaryExitErrorCode.INVALID_SIGNATURE,
|
package/src/db/beacon.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {ChainForkConfig} from "@lodestar/config";
|
|
2
|
-
import {Db, LevelDbControllerMetrics} from "@lodestar/db";
|
|
2
|
+
import {Db, LevelDbControllerMetrics, encodeKey} from "@lodestar/db";
|
|
3
|
+
import {Bucket} from "./buckets.js";
|
|
3
4
|
import {IBeaconDb} from "./interface.js";
|
|
4
5
|
import {CheckpointStateRepository} from "./repositories/checkpointState.js";
|
|
5
6
|
import {
|
|
@@ -14,16 +15,12 @@ import {
|
|
|
14
15
|
CheckpointHeaderRepository,
|
|
15
16
|
DataColumnSidecarArchiveRepository,
|
|
16
17
|
DataColumnSidecarRepository,
|
|
17
|
-
DepositDataRootRepository,
|
|
18
|
-
DepositEventRepository,
|
|
19
|
-
Eth1DataRepository,
|
|
20
18
|
ProposerSlashingRepository,
|
|
21
19
|
StateArchiveRepository,
|
|
22
20
|
SyncCommitteeRepository,
|
|
23
21
|
SyncCommitteeWitnessRepository,
|
|
24
22
|
VoluntaryExitRepository,
|
|
25
23
|
} from "./repositories/index.js";
|
|
26
|
-
import {PreGenesisState, PreGenesisStateLastProcessedBlock} from "./single/index.js";
|
|
27
24
|
|
|
28
25
|
export type BeaconDbModules = {
|
|
29
26
|
config: ChainForkConfig;
|
|
@@ -45,14 +42,8 @@ export class BeaconDb implements IBeaconDb {
|
|
|
45
42
|
voluntaryExit: VoluntaryExitRepository;
|
|
46
43
|
proposerSlashing: ProposerSlashingRepository;
|
|
47
44
|
attesterSlashing: AttesterSlashingRepository;
|
|
48
|
-
depositEvent: DepositEventRepository;
|
|
49
45
|
blsToExecutionChange: BLSToExecutionChangeRepository;
|
|
50
46
|
|
|
51
|
-
depositDataRoot: DepositDataRootRepository;
|
|
52
|
-
eth1Data: Eth1DataRepository;
|
|
53
|
-
preGenesisState: PreGenesisState;
|
|
54
|
-
preGenesisStateLastProcessedBlock: PreGenesisStateLastProcessedBlock;
|
|
55
|
-
|
|
56
47
|
// lightclient
|
|
57
48
|
bestLightClientUpdate: BestLightClientUpdateRepository;
|
|
58
49
|
checkpointHeader: CheckpointHeaderRepository;
|
|
@@ -80,11 +71,6 @@ export class BeaconDb implements IBeaconDb {
|
|
|
80
71
|
this.blsToExecutionChange = new BLSToExecutionChangeRepository(config, db);
|
|
81
72
|
this.proposerSlashing = new ProposerSlashingRepository(config, db);
|
|
82
73
|
this.attesterSlashing = new AttesterSlashingRepository(config, db);
|
|
83
|
-
this.depositEvent = new DepositEventRepository(config, db);
|
|
84
|
-
this.depositDataRoot = new DepositDataRootRepository(config, db);
|
|
85
|
-
this.eth1Data = new Eth1DataRepository(config, db);
|
|
86
|
-
this.preGenesisState = new PreGenesisState(config, db);
|
|
87
|
-
this.preGenesisStateLastProcessedBlock = new PreGenesisStateLastProcessedBlock(config, db);
|
|
88
74
|
|
|
89
75
|
// lightclient
|
|
90
76
|
this.bestLightClientUpdate = new BestLightClientUpdateRepository(config, db);
|
|
@@ -110,4 +96,40 @@ export class BeaconDb implements IBeaconDb {
|
|
|
110
96
|
// TODO: Enable once it's deemed safe
|
|
111
97
|
// await this.block.batchDelete(await this.block.keys());
|
|
112
98
|
}
|
|
99
|
+
|
|
100
|
+
async deleteDeprecatedEth1Data(): Promise<void> {
|
|
101
|
+
const deprecatedBuckets = [
|
|
102
|
+
Bucket.phase0_eth1Data,
|
|
103
|
+
Bucket.index_depositDataRoot,
|
|
104
|
+
Bucket.phase0_depositData,
|
|
105
|
+
Bucket.phase0_depositEvent,
|
|
106
|
+
Bucket.phase0_preGenesisState,
|
|
107
|
+
Bucket.phase0_preGenesisStateLastProcessedBlock,
|
|
108
|
+
];
|
|
109
|
+
|
|
110
|
+
for (const bucket of deprecatedBuckets) {
|
|
111
|
+
await this.deleteBucketData(bucket);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
private async deleteBucketData(bucket: Bucket): Promise<void> {
|
|
116
|
+
const minKey = encodeKey(bucket, Buffer.alloc(0));
|
|
117
|
+
const maxKey = encodeKey(bucket + 1, Buffer.alloc(0));
|
|
118
|
+
|
|
119
|
+
// Batch delete to avoid loading all keys into memory at once
|
|
120
|
+
const BATCH_DELETE_SIZE = 1000;
|
|
121
|
+
let keysBatch: Uint8Array[] = [];
|
|
122
|
+
|
|
123
|
+
for await (const key of this.db.keysStream({gte: minKey, lt: maxKey})) {
|
|
124
|
+
keysBatch.push(key);
|
|
125
|
+
if (keysBatch.length >= BATCH_DELETE_SIZE) {
|
|
126
|
+
await this.db.batchDelete(keysBatch);
|
|
127
|
+
keysBatch = [];
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
if (keysBatch.length > 0) {
|
|
132
|
+
await this.db.batchDelete(keysBatch);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
113
135
|
}
|
package/src/db/buckets.ts
CHANGED
|
@@ -16,14 +16,16 @@ export enum Bucket {
|
|
|
16
16
|
index_mainChain = 6, // Slot -> Root<BeaconBlock>
|
|
17
17
|
// justified, finalized state and block hashes
|
|
18
18
|
index_chainInfo = 7, // Key -> Number64 | stateHash | blockHash
|
|
19
|
-
|
|
20
|
-
phase0_eth1Data = 8,
|
|
21
|
-
|
|
19
|
+
/** @deprecated Eth1 deposit tracking is not required since electra, only kept around to delete data from existing databases */
|
|
20
|
+
phase0_eth1Data = 8,
|
|
21
|
+
/** @deprecated Eth1 deposit tracking is not required since electra, only kept around to delete data from existing databases */
|
|
22
|
+
index_depositDataRoot = 9,
|
|
22
23
|
|
|
23
24
|
// op pool
|
|
24
25
|
// phase0_attestation = 10, // DEPRECATED on v0.25.0
|
|
25
26
|
// phase0_aggregateAndProof = 11, // Root -> AggregateAndProof, DEPRECATED on v.27.0
|
|
26
|
-
|
|
27
|
+
/** @deprecated Eth1 deposit tracking is not required since electra, only kept around to delete data from existing databases */
|
|
28
|
+
phase0_depositData = 12,
|
|
27
29
|
phase0_exit = 13, // ValidatorIndex -> VoluntaryExit
|
|
28
30
|
phase0_proposerSlashing = 14, // ValidatorIndex -> ProposerSlashing
|
|
29
31
|
allForks_attesterSlashing = 15, // Root -> AttesterSlashing
|
|
@@ -32,15 +34,18 @@ export enum Bucket {
|
|
|
32
34
|
allForks_checkpointState = 17, // Root -> BeaconState
|
|
33
35
|
|
|
34
36
|
// allForks_pendingBlock = 25, // Root -> SignedBeaconBlock // DEPRECATED on v0.30.0
|
|
35
|
-
|
|
37
|
+
/** @deprecated Eth1 deposit tracking is not required since electra, only kept around to delete data from existing databases */
|
|
38
|
+
phase0_depositEvent = 19,
|
|
36
39
|
|
|
37
40
|
index_stateArchiveRootIndex = 26, // State Root -> slot
|
|
38
41
|
|
|
39
42
|
deneb_blobSidecars = 27, // DENEB BeaconBlockRoot -> BlobSidecars
|
|
40
43
|
deneb_blobSidecarsArchive = 28, // DENEB BeaconBlockSlot -> BlobSidecars
|
|
41
44
|
|
|
42
|
-
|
|
43
|
-
|
|
45
|
+
/** @deprecated Genesis from eth1 is no longer supported, only kept around to delete data from existing databases */
|
|
46
|
+
phase0_preGenesisState = 30,
|
|
47
|
+
/** @deprecated Genesis from eth1 is no longer supported, only kept around to delete data from existing databases */
|
|
48
|
+
phase0_preGenesisStateLastProcessedBlock = 31,
|
|
44
49
|
|
|
45
50
|
// Lightclient server
|
|
46
51
|
// altair_bestUpdatePerCommitteePeriod = 30, // DEPRECATED on v0.32.0
|
package/src/db/interface.ts
CHANGED
|
@@ -12,16 +12,12 @@ import {
|
|
|
12
12
|
CheckpointHeaderRepository,
|
|
13
13
|
DataColumnSidecarArchiveRepository,
|
|
14
14
|
DataColumnSidecarRepository,
|
|
15
|
-
DepositDataRootRepository,
|
|
16
|
-
DepositEventRepository,
|
|
17
|
-
Eth1DataRepository,
|
|
18
15
|
ProposerSlashingRepository,
|
|
19
16
|
StateArchiveRepository,
|
|
20
17
|
SyncCommitteeRepository,
|
|
21
18
|
SyncCommitteeWitnessRepository,
|
|
22
19
|
VoluntaryExitRepository,
|
|
23
20
|
} from "./repositories/index.js";
|
|
24
|
-
import {PreGenesisState, PreGenesisStateLastProcessedBlock} from "./single/index.js";
|
|
25
21
|
|
|
26
22
|
/**
|
|
27
23
|
* The DB service manages the data layer of the beacon chain
|
|
@@ -48,17 +44,8 @@ export interface IBeaconDb {
|
|
|
48
44
|
voluntaryExit: VoluntaryExitRepository;
|
|
49
45
|
proposerSlashing: ProposerSlashingRepository;
|
|
50
46
|
attesterSlashing: AttesterSlashingRepository;
|
|
51
|
-
depositEvent: DepositEventRepository;
|
|
52
47
|
blsToExecutionChange: BLSToExecutionChangeRepository;
|
|
53
48
|
|
|
54
|
-
// eth1 processing
|
|
55
|
-
preGenesisState: PreGenesisState;
|
|
56
|
-
preGenesisStateLastProcessedBlock: PreGenesisStateLastProcessedBlock;
|
|
57
|
-
|
|
58
|
-
// all deposit data roots and merkle tree
|
|
59
|
-
depositDataRoot: DepositDataRootRepository;
|
|
60
|
-
eth1Data: Eth1DataRepository;
|
|
61
|
-
|
|
62
49
|
// lightclient
|
|
63
50
|
bestLightClientUpdate: BestLightClientUpdateRepository;
|
|
64
51
|
checkpointHeader: CheckpointHeaderRepository;
|
|
@@ -69,6 +56,8 @@ export interface IBeaconDb {
|
|
|
69
56
|
|
|
70
57
|
pruneHotDb(): Promise<void>;
|
|
71
58
|
|
|
59
|
+
deleteDeprecatedEth1Data(): Promise<void>;
|
|
60
|
+
|
|
72
61
|
/** Close the connection to the db instance and close the db store. */
|
|
73
62
|
close(): Promise<void>;
|
|
74
63
|
/** To inject metrics after CLI initialization */
|
|
@@ -8,9 +8,6 @@ export {BlockArchiveRepository} from "./blockArchive.js";
|
|
|
8
8
|
export {BLSToExecutionChangeRepository} from "./blsToExecutionChange.js";
|
|
9
9
|
export {DataColumnSidecarRepository} from "./dataColumnSidecar.js";
|
|
10
10
|
export {DataColumnSidecarArchiveRepository} from "./dataColumnSidecarArchive.js";
|
|
11
|
-
export {DepositDataRootRepository} from "./depositDataRoot.js";
|
|
12
|
-
export {DepositEventRepository} from "./depositEvent.js";
|
|
13
|
-
export {Eth1DataRepository} from "./eth1Data.js";
|
|
14
11
|
export {BestLightClientUpdateRepository} from "./lightclientBestUpdate.js";
|
|
15
12
|
export {CheckpointHeaderRepository} from "./lightclientCheckpointHeader.js";
|
|
16
13
|
export {SyncCommitteeRepository} from "./lightclientSyncCommittee.js";
|
|
@@ -4,14 +4,6 @@ import {BlobsBundle, ExecutionPayload, ExecutionRequests, Root, RootHex, Wei} fr
|
|
|
4
4
|
import {BlobAndProof} from "@lodestar/types/deneb";
|
|
5
5
|
import {BlobAndProofV2} from "@lodestar/types/fulu";
|
|
6
6
|
import {strip0xPrefix} from "@lodestar/utils";
|
|
7
|
-
import {
|
|
8
|
-
ErrorJsonRpcResponse,
|
|
9
|
-
HttpRpcError,
|
|
10
|
-
IJsonRpcHttpClient,
|
|
11
|
-
JsonRpcHttpClientEvent,
|
|
12
|
-
ReqOpts,
|
|
13
|
-
} from "../../eth1/provider/jsonRpcHttpClient.js";
|
|
14
|
-
import {bytesToData, numToQuantity} from "../../eth1/provider/utils.js";
|
|
15
7
|
import {Metrics} from "../../metrics/index.js";
|
|
16
8
|
import {EPOCHS_PER_BATCH} from "../../sync/constants.js";
|
|
17
9
|
import {getLodestarClientVersion} from "../../util/metadata.js";
|
|
@@ -27,6 +19,13 @@ import {
|
|
|
27
19
|
PayloadId,
|
|
28
20
|
VersionedHashes,
|
|
29
21
|
} from "./interface.js";
|
|
22
|
+
import {
|
|
23
|
+
ErrorJsonRpcResponse,
|
|
24
|
+
HttpRpcError,
|
|
25
|
+
IJsonRpcHttpClient,
|
|
26
|
+
JsonRpcHttpClientEvent,
|
|
27
|
+
ReqOpts,
|
|
28
|
+
} from "./jsonRpcHttpClient.js";
|
|
30
29
|
import {PayloadIdCache} from "./payloadIdCache.js";
|
|
31
30
|
import {
|
|
32
31
|
BLOB_AND_PROOF_V2_RPC_BYTES,
|
|
@@ -45,7 +44,7 @@ import {
|
|
|
45
44
|
serializePayloadAttributes,
|
|
46
45
|
serializeVersionedHashes,
|
|
47
46
|
} from "./types.js";
|
|
48
|
-
import {getExecutionEngineState} from "./utils.js";
|
|
47
|
+
import {bytesToData, getExecutionEngineState, numToQuantity} from "./utils.js";
|
|
49
48
|
|
|
50
49
|
export type ExecutionEngineModules = {
|
|
51
50
|
signal: AbortSignal;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import {fromHex, toPrintableUrl} from "@lodestar/utils";
|
|
2
|
-
import {JsonRpcHttpClient} from "../../eth1/provider/jsonRpcHttpClient.js";
|
|
3
2
|
import {ExecutionEngineDisabled} from "./disabled.js";
|
|
4
3
|
import {
|
|
5
4
|
ExecutionEngineHttp,
|
|
@@ -8,6 +7,7 @@ import {
|
|
|
8
7
|
defaultExecutionEngineHttpOpts,
|
|
9
8
|
} from "./http.js";
|
|
10
9
|
import {IExecutionEngine} from "./interface.js";
|
|
10
|
+
import {JsonRpcHttpClient} from "./jsonRpcHttpClient.js";
|
|
11
11
|
import {ExecutionEngineMockBackend, ExecutionEngineMockOpts} from "./mock.js";
|
|
12
12
|
import {ExecutionEngineMockJsonRpcClient, JsonRpcBackend} from "./utils.js";
|
|
13
13
|
|
|
@@ -9,9 +9,9 @@ import {
|
|
|
9
9
|
import {BlobsBundle, ExecutionPayload, ExecutionRequests, Root, RootHex, Wei, capella} from "@lodestar/types";
|
|
10
10
|
import {BlobAndProof} from "@lodestar/types/deneb";
|
|
11
11
|
import {BlobAndProofV2} from "@lodestar/types/fulu";
|
|
12
|
-
import {DATA} from "../../eth1/provider/utils.js";
|
|
13
12
|
import {PayloadId, PayloadIdCache, WithdrawalV1} from "./payloadIdCache.js";
|
|
14
13
|
import {ExecutionPayloadBody} from "./types.js";
|
|
14
|
+
import {DATA} from "./utils.js";
|
|
15
15
|
|
|
16
16
|
export {PayloadIdCache, type PayloadId, type WithdrawalV1};
|
|
17
17
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {EventEmitter} from "node:events";
|
|
2
2
|
import {StrictEventEmitter} from "strict-event-emitter-types";
|
|
3
3
|
import {ErrorAborted, Gauge, Histogram, TimeoutError, fetch, isValidHttpUrl, retry} from "@lodestar/utils";
|
|
4
|
-
import {IJson, RpcPayload} from "../interface.js";
|
|
5
4
|
import {JwtClaim, encodeJwtToken} from "./jwt.js";
|
|
5
|
+
import {IJson, RpcPayload} from "./utils.js";
|
|
6
6
|
|
|
7
7
|
export enum JsonRpcHttpClientEvent {
|
|
8
8
|
/**
|