@lodestar/beacon-node 1.39.0-dev.882891d89c → 1.39.0-dev.b37f2bd1bd
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/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/verifyBlocksSignatures.d.ts +1 -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/chain.d.ts +4 -1
- package/lib/chain/chain.d.ts.map +1 -1
- package/lib/chain/chain.js +16 -8
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/genesis/genesis.d.ts +51 -0
- package/lib/chain/genesis/genesis.d.ts.map +1 -0
- package/lib/chain/genesis/genesis.js +123 -0
- package/lib/chain/genesis/genesis.js.map +1 -0
- package/lib/chain/genesis/interface.d.ts +13 -0
- package/lib/chain/genesis/interface.d.ts.map +1 -0
- package/lib/chain/genesis/interface.js +2 -0
- package/lib/chain/genesis/interface.js.map +1 -0
- package/lib/chain/initState.d.ts +14 -1
- package/lib/chain/initState.d.ts.map +1 -1
- package/lib/chain/initState.js +62 -1
- package/lib/chain/initState.js.map +1 -1
- package/lib/chain/interface.d.ts +2 -0
- 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 +0 -3
- package/lib/chain/opPools/opPool.d.ts.map +1 -1
- package/lib/chain/opPools/opPool.js +8 -9
- package/lib/chain/opPools/opPool.js.map +1 -1
- package/lib/chain/prepareNextSlot.d.ts +4 -0
- package/lib/chain/prepareNextSlot.d.ts.map +1 -1
- package/lib/chain/prepareNextSlot.js +21 -1
- package/lib/chain/prepareNextSlot.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts +1 -0
- package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +11 -8
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/rewards/attestationsRewards.d.ts +1 -2
- package/lib/chain/rewards/attestationsRewards.d.ts.map +1 -1
- package/lib/chain/rewards/attestationsRewards.js +8 -8
- package/lib/chain/rewards/attestationsRewards.js.map +1 -1
- package/lib/chain/rewards/blockRewards.d.ts +1 -2
- package/lib/chain/rewards/blockRewards.d.ts.map +1 -1
- package/lib/chain/rewards/blockRewards.js +5 -5
- package/lib/chain/rewards/blockRewards.js.map +1 -1
- package/lib/chain/rewards/syncCommitteeRewards.d.ts +1 -2
- package/lib/chain/rewards/syncCommitteeRewards.d.ts.map +1 -1
- package/lib/chain/rewards/syncCommitteeRewards.js +2 -2
- package/lib/chain/rewards/syncCommitteeRewards.js.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +1 -4
- package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.js +2 -4
- package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
- package/lib/chain/validation/attesterSlashing.js +1 -1
- package/lib/chain/validation/attesterSlashing.js.map +1 -1
- package/lib/chain/validation/block.js +1 -1
- package/lib/chain/validation/block.js.map +1 -1
- package/lib/chain/validation/blsToExecutionChange.js +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 +1 -2
- 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 +1 -2
- 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 +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 +1 -2
- package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js +2 -1
- 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 +7 -3
- package/lib/db/beacon.d.ts.map +1 -1
- package/lib/db/beacon.js +12 -33
- package/lib/db/beacon.js.map +1 -1
- package/lib/db/buckets.d.ts +6 -12
- package/lib/db/buckets.d.ts.map +1 -1
- package/lib/db/buckets.js +1 -6
- package/lib/db/buckets.js.map +1 -1
- package/lib/db/interface.d.ts +7 -2
- package/lib/db/interface.d.ts.map +1 -1
- package/lib/db/repositories/depositDataRoot.d.ts +22 -0
- package/lib/db/repositories/depositDataRoot.d.ts.map +1 -0
- package/lib/db/repositories/depositDataRoot.js +62 -0
- package/lib/db/repositories/depositDataRoot.js.map +1 -0
- package/lib/db/repositories/depositEvent.d.ts +13 -0
- package/lib/db/repositories/depositEvent.d.ts.map +1 -0
- package/lib/db/repositories/depositEvent.js +27 -0
- package/lib/db/repositories/depositEvent.js.map +1 -0
- package/lib/db/repositories/eth1Data.d.ts +13 -0
- package/lib/db/repositories/eth1Data.d.ts.map +1 -0
- package/lib/db/repositories/eth1Data.js +26 -0
- package/lib/db/repositories/eth1Data.js.map +1 -0
- package/lib/db/repositories/index.d.ts +3 -0
- package/lib/db/repositories/index.d.ts.map +1 -1
- package/lib/db/repositories/index.js +3 -0
- package/lib/db/repositories/index.js.map +1 -1
- package/lib/db/single/index.d.ts +3 -0
- package/lib/db/single/index.d.ts.map +1 -0
- package/lib/db/single/index.js +3 -0
- package/lib/db/single/index.js.map +1 -0
- package/lib/db/single/preGenesisState.d.ts +16 -0
- package/lib/db/single/preGenesisState.d.ts.map +1 -0
- package/lib/db/single/preGenesisState.js +29 -0
- package/lib/db/single/preGenesisState.js.map +1 -0
- package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts +14 -0
- package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts.map +1 -0
- package/lib/db/single/preGenesisStateLastProcessedBlock.js +27 -0
- package/lib/db/single/preGenesisStateLastProcessedBlock.js.map +1 -0
- package/lib/eth1/errors.d.ts +66 -0
- package/lib/eth1/errors.d.ts.map +1 -0
- package/lib/eth1/errors.js +27 -0
- package/lib/eth1/errors.js.map +1 -0
- package/lib/eth1/eth1DataCache.d.ts +19 -0
- package/lib/eth1/eth1DataCache.d.ts.map +1 -0
- package/lib/eth1/eth1DataCache.js +19 -0
- package/lib/eth1/eth1DataCache.js.map +1 -0
- package/lib/eth1/eth1DepositDataTracker.d.ts +80 -0
- package/lib/eth1/eth1DepositDataTracker.d.ts.map +1 -0
- package/lib/eth1/eth1DepositDataTracker.js +317 -0
- package/lib/eth1/eth1DepositDataTracker.js.map +1 -0
- package/lib/eth1/eth1DepositsCache.d.ts +42 -0
- package/lib/eth1/eth1DepositsCache.d.ts.map +1 -0
- package/lib/eth1/eth1DepositsCache.js +119 -0
- package/lib/eth1/eth1DepositsCache.js.map +1 -0
- package/lib/eth1/index.d.ts +31 -0
- package/lib/eth1/index.d.ts.map +1 -0
- package/lib/eth1/index.js +71 -0
- package/lib/eth1/index.js.map +1 -0
- package/lib/eth1/interface.d.ts +74 -0
- package/lib/eth1/interface.d.ts.map +1 -0
- package/lib/eth1/interface.js +8 -0
- package/lib/eth1/interface.js.map +1 -0
- package/lib/eth1/options.d.ts +22 -0
- package/lib/eth1/options.d.ts.map +1 -0
- package/lib/eth1/options.js +8 -0
- package/lib/eth1/options.js.map +1 -0
- package/lib/eth1/provider/eth1Provider.d.ts +39 -0
- package/lib/eth1/provider/eth1Provider.d.ts.map +1 -0
- package/lib/eth1/provider/eth1Provider.js +147 -0
- package/lib/eth1/provider/eth1Provider.js.map +1 -0
- package/lib/{execution/engine → eth1/provider}/jsonRpcHttpClient.d.ts +1 -1
- package/lib/eth1/provider/jsonRpcHttpClient.d.ts.map +1 -0
- package/lib/eth1/provider/jsonRpcHttpClient.js.map +1 -0
- package/lib/eth1/provider/jwt.d.ts.map +1 -0
- package/lib/eth1/provider/jwt.js.map +1 -0
- package/lib/eth1/provider/utils.d.ts +65 -0
- package/lib/eth1/provider/utils.d.ts.map +1 -0
- package/lib/eth1/provider/utils.js +120 -0
- package/lib/eth1/provider/utils.js.map +1 -0
- package/lib/eth1/stream.d.ts +15 -0
- package/lib/eth1/stream.d.ts.map +1 -0
- package/lib/eth1/stream.js +54 -0
- package/lib/eth1/stream.js.map +1 -0
- package/lib/eth1/utils/depositContract.d.ts +14 -0
- package/lib/eth1/utils/depositContract.d.ts.map +1 -0
- package/lib/eth1/utils/depositContract.js +33 -0
- package/lib/eth1/utils/depositContract.js.map +1 -0
- package/lib/eth1/utils/deposits.d.ts +8 -0
- package/lib/eth1/utils/deposits.d.ts.map +1 -0
- package/lib/eth1/utils/deposits.js +47 -0
- package/lib/eth1/utils/deposits.js.map +1 -0
- package/lib/eth1/utils/eth1Data.d.ts +22 -0
- package/lib/eth1/utils/eth1Data.d.ts.map +1 -0
- package/lib/eth1/utils/eth1Data.js +77 -0
- package/lib/eth1/utils/eth1Data.js.map +1 -0
- package/lib/eth1/utils/eth1DepositEvent.d.ts +7 -0
- package/lib/eth1/utils/eth1DepositEvent.d.ts.map +1 -0
- package/lib/eth1/utils/eth1DepositEvent.js +13 -0
- package/lib/eth1/utils/eth1DepositEvent.js.map +1 -0
- package/lib/eth1/utils/eth1Vote.d.ts +17 -0
- package/lib/eth1/utils/eth1Vote.d.ts.map +1 -0
- package/lib/eth1/utils/eth1Vote.js +111 -0
- package/lib/eth1/utils/eth1Vote.js.map +1 -0
- package/lib/eth1/utils/groupDepositEventsByBlock.d.ts +9 -0
- package/lib/eth1/utils/groupDepositEventsByBlock.d.ts.map +1 -0
- package/lib/eth1/utils/groupDepositEventsByBlock.js +17 -0
- package/lib/eth1/utils/groupDepositEventsByBlock.js.map +1 -0
- package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts +10 -0
- package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts.map +1 -0
- package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.js +14 -0
- package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.js.map +1 -0
- 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 +3 -2
- 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/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 +2 -64
- package/lib/execution/engine/utils.d.ts.map +1 -1
- package/lib/execution/engine/utils.js +2 -91
- package/lib/execution/engine/utils.js.map +1 -1
- package/lib/index.d.ts +2 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +35 -0
- package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
- package/lib/metrics/metrics/lodestar.js +90 -0
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/node/nodejs.d.ts.map +1 -1
- package/lib/node/nodejs.js +9 -10
- package/lib/node/nodejs.js.map +1 -1
- package/lib/node/options.d.ts +2 -0
- package/lib/node/options.d.ts.map +1 -1
- package/lib/node/options.js +2 -0
- package/lib/node/options.js.map +1 -1
- package/lib/node/utils/interop/deposits.d.ts +1 -2
- 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 +7 -1
- package/lib/node/utils/state.d.ts.map +1 -1
- package/lib/node/utils/state.js +14 -1
- 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 +4 -2
- package/lib/sync/backfill/backfill.js.map +1 -1
- package/lib/sync/backfill/verify.d.ts +1 -1
- 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/package.json +20 -14
- package/src/api/impl/beacon/blocks/utils.ts +1 -1
- package/src/chain/blocks/verifyBlock.ts +0 -1
- package/src/chain/blocks/verifyBlocksSignatures.ts +1 -3
- package/src/chain/chain.ts +19 -7
- package/src/chain/genesis/genesis.ts +190 -0
- package/src/chain/genesis/interface.ts +14 -0
- package/src/chain/initState.ts +97 -1
- package/src/chain/interface.ts +2 -0
- package/src/chain/opPools/aggregatedAttestationPool.ts +7 -7
- package/src/chain/opPools/opPool.ts +8 -8
- package/src/chain/prepareNextSlot.ts +28 -1
- package/src/chain/produceBlock/produceBlockBody.ts +12 -8
- package/src/chain/rewards/attestationsRewards.ts +4 -13
- package/src/chain/rewards/blockRewards.ts +3 -6
- package/src/chain/rewards/syncCommitteeRewards.ts +1 -3
- package/src/chain/stateCache/persistentCheckpointsCache.ts +2 -15
- package/src/chain/validation/attesterSlashing.ts +1 -1
- package/src/chain/validation/block.ts +1 -1
- package/src/chain/validation/blsToExecutionChange.ts +1 -1
- package/src/chain/validation/proposerSlashing.ts +1 -1
- package/src/chain/validation/signatureSets/aggregateAndProof.ts +1 -1
- package/src/chain/validation/signatureSets/contributionAndProof.ts +1 -3
- package/src/chain/validation/signatureSets/syncCommittee.ts +1 -3
- package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +1 -3
- package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +1 -2
- package/src/chain/validation/syncCommittee.ts +1 -1
- package/src/chain/validation/syncCommitteeContributionAndProof.ts +3 -8
- package/src/chain/validation/voluntaryExit.ts +1 -1
- package/src/db/beacon.ts +16 -38
- package/src/db/buckets.ts +7 -12
- package/src/db/interface.ts +13 -2
- package/src/db/repositories/depositDataRoot.ts +80 -0
- package/src/db/repositories/depositEvent.ts +32 -0
- package/src/db/repositories/eth1Data.ts +33 -0
- package/src/db/repositories/index.ts +3 -0
- package/src/db/single/index.ts +2 -0
- package/src/db/single/preGenesisState.ts +37 -0
- package/src/db/single/preGenesisStateLastProcessedBlock.ts +34 -0
- package/src/eth1/errors.ts +40 -0
- package/src/eth1/eth1DataCache.ts +26 -0
- package/src/eth1/eth1DepositDataTracker.ts +410 -0
- package/src/eth1/eth1DepositsCache.ts +141 -0
- package/src/eth1/index.ts +94 -0
- package/src/eth1/interface.ts +87 -0
- package/src/eth1/options.ts +28 -0
- package/src/eth1/provider/eth1Provider.ts +229 -0
- package/src/{execution/engine → eth1/provider}/jsonRpcHttpClient.ts +1 -1
- package/src/eth1/provider/utils.ts +136 -0
- package/src/eth1/stream.ts +75 -0
- package/src/eth1/utils/depositContract.ts +37 -0
- package/src/eth1/utils/deposits.ts +70 -0
- package/src/eth1/utils/eth1Data.ts +100 -0
- package/src/eth1/utils/eth1DepositEvent.ts +12 -0
- package/src/eth1/utils/eth1Vote.ts +142 -0
- package/src/eth1/utils/groupDepositEventsByBlock.ts +19 -0
- package/src/eth1/utils/optimizeNextBlockDiffForGenesis.ts +18 -0
- package/src/execution/engine/http.ts +9 -8
- package/src/execution/engine/index.ts +1 -1
- package/src/execution/engine/interface.ts +1 -1
- package/src/execution/engine/mock.ts +2 -1
- package/src/execution/engine/payloadIdCache.ts +1 -1
- package/src/execution/engine/types.ts +9 -9
- package/src/execution/engine/utils.ts +5 -111
- package/src/index.ts +2 -1
- package/src/metrics/metrics/lodestar.ts +92 -0
- package/src/node/nodejs.ts +9 -11
- package/src/node/options.ts +3 -0
- package/src/node/utils/interop/deposits.ts +1 -3
- package/src/node/utils/interop/state.ts +1 -1
- package/src/node/utils/state.ts +18 -3
- package/src/sync/backfill/backfill.ts +3 -8
- package/src/sync/backfill/verify.ts +1 -3
- package/lib/execution/engine/jsonRpcHttpClient.d.ts.map +0 -1
- package/lib/execution/engine/jsonRpcHttpClient.js.map +0 -1
- package/lib/execution/engine/jwt.d.ts.map +0 -1
- package/lib/execution/engine/jwt.js.map +0 -1
- /package/lib/{execution/engine → eth1/provider}/jsonRpcHttpClient.js +0 -0
- /package/lib/{execution/engine → eth1/provider}/jwt.d.ts +0 -0
- /package/lib/{execution/engine → eth1/provider}/jwt.js +0 -0
- /package/src/{execution/engine → eth1/provider}/jwt.ts +0 -0
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import {PubkeyIndexMap} from "@chainsafe/pubkey-index-map";
|
|
2
2
|
import {routes} from "@lodestar/api";
|
|
3
|
-
import {BeaconConfig} from "@lodestar/config";
|
|
4
3
|
import {
|
|
5
4
|
EFFECTIVE_BALANCE_INCREMENT,
|
|
6
5
|
ForkName,
|
|
@@ -39,12 +38,11 @@ const defaultAttestationsReward = {head: 0, target: 0, source: 0, inclusionDelay
|
|
|
39
38
|
const defaultAttestationsPenalty = {target: 0, source: 0};
|
|
40
39
|
|
|
41
40
|
export async function computeAttestationsRewards(
|
|
42
|
-
config: BeaconConfig,
|
|
43
41
|
pubkey2index: PubkeyIndexMap,
|
|
44
42
|
state: CachedBeaconStateAllForks,
|
|
45
43
|
validatorIds?: (ValidatorIndex | string)[]
|
|
46
44
|
): Promise<AttestationsRewards> {
|
|
47
|
-
const fork = config.getForkName(state.slot);
|
|
45
|
+
const fork = state.config.getForkName(state.slot);
|
|
48
46
|
if (fork === ForkName.phase0) {
|
|
49
47
|
throw Error("Unsupported fork. Attestations rewards calculation is not available in phase0");
|
|
50
48
|
}
|
|
@@ -52,13 +50,8 @@ export async function computeAttestationsRewards(
|
|
|
52
50
|
const stateAltair = state as CachedBeaconStateAltair;
|
|
53
51
|
const transitionCache = beforeProcessEpoch(stateAltair);
|
|
54
52
|
|
|
55
|
-
const [idealRewards, penalties] = computeIdealAttestationsRewardsAndPenaltiesAltair(
|
|
56
|
-
config,
|
|
57
|
-
stateAltair,
|
|
58
|
-
transitionCache
|
|
59
|
-
);
|
|
53
|
+
const [idealRewards, penalties] = computeIdealAttestationsRewardsAndPenaltiesAltair(stateAltair, transitionCache);
|
|
60
54
|
const totalRewards = computeTotalAttestationsRewardsAltair(
|
|
61
|
-
config,
|
|
62
55
|
pubkey2index,
|
|
63
56
|
stateAltair,
|
|
64
57
|
transitionCache,
|
|
@@ -71,13 +64,12 @@ export async function computeAttestationsRewards(
|
|
|
71
64
|
}
|
|
72
65
|
|
|
73
66
|
function computeIdealAttestationsRewardsAndPenaltiesAltair(
|
|
74
|
-
config: BeaconConfig,
|
|
75
67
|
state: CachedBeaconStateAllForks,
|
|
76
68
|
transitionCache: EpochTransitionCache
|
|
77
69
|
): [IdealAttestationsReward[], AttestationsPenalty[]] {
|
|
78
70
|
const baseRewardPerIncrement = transitionCache.baseRewardPerIncrement;
|
|
79
71
|
const activeBalanceByIncrement = transitionCache.totalActiveStakeByIncrement;
|
|
80
|
-
const fork = config.getForkName(state.slot);
|
|
72
|
+
const fork = state.config.getForkName(state.slot);
|
|
81
73
|
const maxEffectiveBalance = isForkPostElectra(fork) ? MAX_EFFECTIVE_BALANCE_ELECTRA : MAX_EFFECTIVE_BALANCE;
|
|
82
74
|
const maxEffectiveBalanceByIncrement = Math.floor(maxEffectiveBalance / EFFECTIVE_BALANCE_INCREMENT);
|
|
83
75
|
|
|
@@ -147,7 +139,6 @@ function computeIdealAttestationsRewardsAndPenaltiesAltair(
|
|
|
147
139
|
|
|
148
140
|
// Same calculation as `getRewardsAndPenaltiesAltair` but returns the breakdown of rewards instead of aggregated
|
|
149
141
|
function computeTotalAttestationsRewardsAltair(
|
|
150
|
-
config: BeaconConfig,
|
|
151
142
|
pubkey2index: PubkeyIndexMap,
|
|
152
143
|
state: CachedBeaconStateAltair,
|
|
153
144
|
transitionCache: EpochTransitionCache,
|
|
@@ -157,7 +148,7 @@ function computeTotalAttestationsRewardsAltair(
|
|
|
157
148
|
): TotalAttestationsReward[] {
|
|
158
149
|
const rewards = [];
|
|
159
150
|
const {flags} = transitionCache;
|
|
160
|
-
const {epochCtx} = state;
|
|
151
|
+
const {epochCtx, config} = state;
|
|
161
152
|
const validatorIndices = validatorIds
|
|
162
153
|
.map((id) => (typeof id === "number" ? id : pubkey2index.get(fromHex(id))))
|
|
163
154
|
.filter((index) => index !== undefined); // Validator indices to include in the result
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import {routes} from "@lodestar/api";
|
|
2
|
-
import {BeaconConfig} from "@lodestar/config";
|
|
3
2
|
import {
|
|
4
3
|
ForkName,
|
|
5
4
|
WHISTLEBLOWER_REWARD_QUOTIENT,
|
|
@@ -27,12 +26,11 @@ type SubRewardValue = number; // All reward values should be integer
|
|
|
27
26
|
* 3) Reporting slashable behaviours from proposer and attester
|
|
28
27
|
*/
|
|
29
28
|
export async function computeBlockRewards(
|
|
30
|
-
config: BeaconConfig,
|
|
31
29
|
block: BeaconBlock,
|
|
32
30
|
preState: CachedBeaconStateAllForks,
|
|
33
31
|
postState?: CachedBeaconStateAllForks
|
|
34
32
|
): Promise<BlockRewards> {
|
|
35
|
-
const fork = config.getForkName(block.slot);
|
|
33
|
+
const fork = preState.config.getForkName(block.slot);
|
|
36
34
|
const {attestations: cachedAttestationsReward = 0, syncAggregate: cachedSyncAggregateReward = 0} =
|
|
37
35
|
postState?.proposerRewards ?? {};
|
|
38
36
|
let blockAttestationReward = cachedAttestationsReward;
|
|
@@ -42,7 +40,7 @@ export async function computeBlockRewards(
|
|
|
42
40
|
blockAttestationReward =
|
|
43
41
|
fork === ForkName.phase0
|
|
44
42
|
? computeBlockAttestationRewardPhase0(block as phase0.BeaconBlock, preState as CachedBeaconStatePhase0)
|
|
45
|
-
: computeBlockAttestationRewardAltair(
|
|
43
|
+
: computeBlockAttestationRewardAltair(block as altair.BeaconBlock, preState as CachedBeaconStateAltair);
|
|
46
44
|
}
|
|
47
45
|
|
|
48
46
|
if (syncAggregateReward === 0) {
|
|
@@ -80,11 +78,10 @@ function computeBlockAttestationRewardPhase0(
|
|
|
80
78
|
* Reuses `processAttestationsAltair()`. Has dependency on RewardCache
|
|
81
79
|
*/
|
|
82
80
|
function computeBlockAttestationRewardAltair(
|
|
83
|
-
config: BeaconConfig,
|
|
84
81
|
block: altair.BeaconBlock,
|
|
85
82
|
preState: CachedBeaconStateAltair
|
|
86
83
|
): SubRewardValue {
|
|
87
|
-
const fork = config.getForkSeq(block.slot);
|
|
84
|
+
const fork = preState.config.getForkSeq(block.slot);
|
|
88
85
|
const {attestations} = block.body;
|
|
89
86
|
|
|
90
87
|
processAttestationsAltair(fork, preState, attestations, false);
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import {routes} from "@lodestar/api";
|
|
2
|
-
import {BeaconConfig} from "@lodestar/config";
|
|
3
2
|
import {ForkName, SYNC_COMMITTEE_SIZE} from "@lodestar/params";
|
|
4
3
|
import {CachedBeaconStateAllForks, CachedBeaconStateAltair, Index2PubkeyCache} from "@lodestar/state-transition";
|
|
5
4
|
import {BeaconBlock, ValidatorIndex, altair} from "@lodestar/types";
|
|
@@ -8,13 +7,12 @@ export type SyncCommitteeRewards = routes.beacon.SyncCommitteeRewards;
|
|
|
8
7
|
type BalanceRecord = {val: number}; // Use val for convenient way to increment/decrement balance
|
|
9
8
|
|
|
10
9
|
export async function computeSyncCommitteeRewards(
|
|
11
|
-
config: BeaconConfig,
|
|
12
10
|
index2pubkey: Index2PubkeyCache,
|
|
13
11
|
block: BeaconBlock,
|
|
14
12
|
preState: CachedBeaconStateAllForks,
|
|
15
13
|
validatorIds: (ValidatorIndex | string)[] = []
|
|
16
14
|
): Promise<SyncCommitteeRewards> {
|
|
17
|
-
const fork = config.getForkName(block.slot);
|
|
15
|
+
const fork = preState.config.getForkName(block.slot);
|
|
18
16
|
if (fork === ForkName.phase0) {
|
|
19
17
|
throw Error("Cannot get sync rewards as phase0 block does not have sync committee");
|
|
20
18
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import {routes} from "@lodestar/api";
|
|
2
|
-
import {BeaconConfig} from "@lodestar/config";
|
|
3
2
|
import {
|
|
4
3
|
CachedBeaconStateAllForks,
|
|
5
4
|
computeStartSlotAtEpoch,
|
|
@@ -25,7 +24,6 @@ export type PersistentCheckpointStateCacheOpts = {
|
|
|
25
24
|
};
|
|
26
25
|
|
|
27
26
|
type PersistentCheckpointStateCacheModules = {
|
|
28
|
-
config: BeaconConfig;
|
|
29
27
|
metrics?: Metrics | null;
|
|
30
28
|
logger: Logger;
|
|
31
29
|
clock?: IClock | null;
|
|
@@ -109,7 +107,6 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
|
|
|
109
107
|
private readonly cache: MapTracker<CacheKey, CacheItem>;
|
|
110
108
|
/** Epoch -> Set<blockRoot> */
|
|
111
109
|
private readonly epochIndex = new MapDef<Epoch, Set<RootHex>>(() => new Set<string>());
|
|
112
|
-
private readonly config: BeaconConfig;
|
|
113
110
|
private readonly metrics: Metrics | null | undefined;
|
|
114
111
|
private readonly logger: Logger;
|
|
115
112
|
private readonly clock: IClock | null | undefined;
|
|
@@ -123,20 +120,10 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
|
|
|
123
120
|
private readonly bufferPool?: BufferPool | null;
|
|
124
121
|
|
|
125
122
|
constructor(
|
|
126
|
-
{
|
|
127
|
-
config,
|
|
128
|
-
metrics,
|
|
129
|
-
logger,
|
|
130
|
-
clock,
|
|
131
|
-
signal,
|
|
132
|
-
datastore,
|
|
133
|
-
blockStateCache,
|
|
134
|
-
bufferPool,
|
|
135
|
-
}: PersistentCheckpointStateCacheModules,
|
|
123
|
+
{metrics, logger, clock, signal, datastore, blockStateCache, bufferPool}: PersistentCheckpointStateCacheModules,
|
|
136
124
|
opts: PersistentCheckpointStateCacheOpts
|
|
137
125
|
) {
|
|
138
126
|
this.cache = new MapTracker(metrics?.cpStateCache);
|
|
139
|
-
this.config = config;
|
|
140
127
|
if (metrics) {
|
|
141
128
|
this.metrics = metrics;
|
|
142
129
|
metrics.cpStateCache.size.addCollect(() => {
|
|
@@ -497,7 +484,7 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
|
|
|
497
484
|
}
|
|
498
485
|
|
|
499
486
|
const blockSlot = state.slot;
|
|
500
|
-
const processCPStatesTimeMs =
|
|
487
|
+
const processCPStatesTimeMs = state.config.getSlotComponentDurationMs(PROCESS_CHECKPOINT_STATES_BPS);
|
|
501
488
|
// we always have clock in production, fallback value is only for test
|
|
502
489
|
const msFromSlot = this.clock?.msFromSlot(blockSlot) ?? processCPStatesTimeMs;
|
|
503
490
|
const msToProcessCPStates = processCPStatesTimeMs - msFromSlot;
|
|
@@ -51,7 +51,7 @@ export async function validateAttesterSlashing(
|
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
const signatureSets = getAttesterSlashingSignatureSets(chain.
|
|
54
|
+
const signatureSets = getAttesterSlashingSignatureSets(chain.index2pubkey, state, attesterSlashing);
|
|
55
55
|
if (!(await chain.bls.verifySignatureSets(signatureSets, {batchable: true, priority: prioritizeBls}))) {
|
|
56
56
|
throw new AttesterSlashingError(GossipAction.REJECT, {
|
|
57
57
|
code: AttesterSlashingErrorCode.INVALID,
|
|
@@ -153,7 +153,7 @@ export async function validateGossipBlock(
|
|
|
153
153
|
|
|
154
154
|
// [REJECT] The proposer signature, signed_beacon_block.signature, is valid with respect to the proposer_index pubkey.
|
|
155
155
|
if (!chain.seenBlockInputCache.isVerifiedProposerSignature(blockSlot, blockRoot, signedBlock.signature)) {
|
|
156
|
-
const signatureSet = getBlockProposerSignatureSet(chain.
|
|
156
|
+
const signatureSet = getBlockProposerSignatureSet(chain.index2pubkey, blockState, signedBlock);
|
|
157
157
|
// Don't batch so verification is not delayed
|
|
158
158
|
if (!(await chain.bls.verifySignatureSets([signatureSet], {verifyOnMainThread: true}))) {
|
|
159
159
|
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} = state;
|
|
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
|
|
@@ -44,7 +44,7 @@ async function validateProposerSlashing(
|
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
const signatureSets = getProposerSlashingSignatureSets(chain.
|
|
47
|
+
const signatureSets = getProposerSlashingSignatureSets(chain.index2pubkey, state, proposerSlashing);
|
|
48
48
|
if (!(await chain.bls.verifySignatureSets(signatureSets, {batchable: true, priority: prioritizeBls}))) {
|
|
49
49
|
throw new ProposerSlashingError(GossipAction.REJECT, {
|
|
50
50
|
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 = config.getDomain(state.slot, DOMAIN_AGGREGATE_AND_PROOF, slot);`
|
|
17
|
+
// previously, we call `const aggregatorDomain = state.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,4 +1,3 @@
|
|
|
1
|
-
import {BeaconConfig} from "@lodestar/config";
|
|
2
1
|
import {DOMAIN_CONTRIBUTION_AND_PROOF} from "@lodestar/params";
|
|
3
2
|
import {
|
|
4
3
|
CachedBeaconStateAllForks,
|
|
@@ -10,12 +9,11 @@ import {
|
|
|
10
9
|
import {altair, ssz} from "@lodestar/types";
|
|
11
10
|
|
|
12
11
|
export function getContributionAndProofSignatureSet(
|
|
13
|
-
config: BeaconConfig,
|
|
14
12
|
index2pubkey: Index2PubkeyCache,
|
|
15
13
|
state: CachedBeaconStateAllForks,
|
|
16
14
|
signedContributionAndProof: altair.SignedContributionAndProof
|
|
17
15
|
): ISignatureSet {
|
|
18
|
-
const domain = config.getDomain(
|
|
16
|
+
const domain = state.config.getDomain(
|
|
19
17
|
state.slot,
|
|
20
18
|
DOMAIN_CONTRIBUTION_AND_PROOF,
|
|
21
19
|
signedContributionAndProof.message.contribution.slot
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import {BeaconConfig} from "@lodestar/config";
|
|
2
1
|
import {DOMAIN_SYNC_COMMITTEE} from "@lodestar/params";
|
|
3
2
|
import {
|
|
4
3
|
CachedBeaconStateAllForks,
|
|
@@ -10,12 +9,11 @@ import {
|
|
|
10
9
|
import {altair, ssz} from "@lodestar/types";
|
|
11
10
|
|
|
12
11
|
export function getSyncCommitteeSignatureSet(
|
|
13
|
-
config: BeaconConfig,
|
|
14
12
|
index2pubkey: Index2PubkeyCache,
|
|
15
13
|
state: CachedBeaconStateAllForks,
|
|
16
14
|
syncCommittee: altair.SyncCommitteeMessage
|
|
17
15
|
): ISignatureSet {
|
|
18
|
-
const domain = config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE, syncCommittee.slot);
|
|
16
|
+
const domain = state.config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE, syncCommittee.slot);
|
|
19
17
|
|
|
20
18
|
return {
|
|
21
19
|
type: SignatureSetType.single,
|
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import {PublicKey} from "@chainsafe/blst";
|
|
2
|
-
import {BeaconConfig} from "@lodestar/config";
|
|
3
2
|
import {DOMAIN_SYNC_COMMITTEE} from "@lodestar/params";
|
|
4
3
|
import {CachedBeaconStateAltair, ISignatureSet, SignatureSetType, computeSigningRoot} from "@lodestar/state-transition";
|
|
5
4
|
import {altair, ssz} from "@lodestar/types";
|
|
6
5
|
|
|
7
6
|
export function getSyncCommitteeContributionSignatureSet(
|
|
8
|
-
config: BeaconConfig,
|
|
9
7
|
state: CachedBeaconStateAltair,
|
|
10
8
|
contribution: altair.SyncCommitteeContribution,
|
|
11
9
|
pubkeys: PublicKey[]
|
|
12
10
|
): ISignatureSet {
|
|
13
|
-
const domain = config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE, contribution.slot);
|
|
11
|
+
const domain = state.config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE, contribution.slot);
|
|
14
12
|
return {
|
|
15
13
|
type: SignatureSetType.aggregate,
|
|
16
14
|
pubkeys,
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import {BeaconConfig} from "@lodestar/config";
|
|
2
1
|
import {DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF} from "@lodestar/params";
|
|
3
2
|
import {
|
|
4
3
|
CachedBeaconStateAllForks,
|
|
@@ -10,11 +9,11 @@ import {
|
|
|
10
9
|
import {altair, ssz} from "@lodestar/types";
|
|
11
10
|
|
|
12
11
|
export function getSyncCommitteeSelectionProofSignatureSet(
|
|
13
|
-
config: BeaconConfig,
|
|
14
12
|
index2pubkey: Index2PubkeyCache,
|
|
15
13
|
state: CachedBeaconStateAllForks,
|
|
16
14
|
contributionAndProof: altair.ContributionAndProof
|
|
17
15
|
): ISignatureSet {
|
|
16
|
+
const {config} = state;
|
|
18
17
|
const slot = contributionAndProof.contribution.slot;
|
|
19
18
|
const domain = config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF, slot);
|
|
20
19
|
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.
|
|
92
|
+
const signatureSet = getSyncCommitteeSignatureSet(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,19 +78,14 @@ 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(
|
|
81
|
+
getSyncCommitteeSelectionProofSignatureSet(index2pubkey, headState, contributionAndProof),
|
|
82
82
|
|
|
83
83
|
// [REJECT] The aggregator signature, signed_contribution_and_proof.signature, is valid.
|
|
84
|
-
getContributionAndProofSignatureSet(
|
|
84
|
+
getContributionAndProofSignatureSet(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(
|
|
89
|
-
chain.config,
|
|
90
|
-
headState as CachedBeaconStateAltair,
|
|
91
|
-
contribution,
|
|
92
|
-
participantPubkeys
|
|
93
|
-
),
|
|
88
|
+
getSyncCommitteeContributionSignatureSet(headState as CachedBeaconStateAltair, contribution, participantPubkeys),
|
|
94
89
|
];
|
|
95
90
|
|
|
96
91
|
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.
|
|
62
|
+
const signatureSet = getVoluntaryExitSignatureSet(chain.index2pubkey, state, 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,6 +1,5 @@
|
|
|
1
1
|
import {ChainForkConfig} from "@lodestar/config";
|
|
2
|
-
import {Db, LevelDbControllerMetrics
|
|
3
|
-
import {Bucket} from "./buckets.js";
|
|
2
|
+
import {Db, LevelDbControllerMetrics} from "@lodestar/db";
|
|
4
3
|
import {IBeaconDb} from "./interface.js";
|
|
5
4
|
import {CheckpointStateRepository} from "./repositories/checkpointState.js";
|
|
6
5
|
import {
|
|
@@ -15,12 +14,16 @@ import {
|
|
|
15
14
|
CheckpointHeaderRepository,
|
|
16
15
|
DataColumnSidecarArchiveRepository,
|
|
17
16
|
DataColumnSidecarRepository,
|
|
17
|
+
DepositDataRootRepository,
|
|
18
|
+
DepositEventRepository,
|
|
19
|
+
Eth1DataRepository,
|
|
18
20
|
ProposerSlashingRepository,
|
|
19
21
|
StateArchiveRepository,
|
|
20
22
|
SyncCommitteeRepository,
|
|
21
23
|
SyncCommitteeWitnessRepository,
|
|
22
24
|
VoluntaryExitRepository,
|
|
23
25
|
} from "./repositories/index.js";
|
|
26
|
+
import {PreGenesisState, PreGenesisStateLastProcessedBlock} from "./single/index.js";
|
|
24
27
|
|
|
25
28
|
export type BeaconDbModules = {
|
|
26
29
|
config: ChainForkConfig;
|
|
@@ -42,8 +45,14 @@ export class BeaconDb implements IBeaconDb {
|
|
|
42
45
|
voluntaryExit: VoluntaryExitRepository;
|
|
43
46
|
proposerSlashing: ProposerSlashingRepository;
|
|
44
47
|
attesterSlashing: AttesterSlashingRepository;
|
|
48
|
+
depositEvent: DepositEventRepository;
|
|
45
49
|
blsToExecutionChange: BLSToExecutionChangeRepository;
|
|
46
50
|
|
|
51
|
+
depositDataRoot: DepositDataRootRepository;
|
|
52
|
+
eth1Data: Eth1DataRepository;
|
|
53
|
+
preGenesisState: PreGenesisState;
|
|
54
|
+
preGenesisStateLastProcessedBlock: PreGenesisStateLastProcessedBlock;
|
|
55
|
+
|
|
47
56
|
// lightclient
|
|
48
57
|
bestLightClientUpdate: BestLightClientUpdateRepository;
|
|
49
58
|
checkpointHeader: CheckpointHeaderRepository;
|
|
@@ -71,6 +80,11 @@ export class BeaconDb implements IBeaconDb {
|
|
|
71
80
|
this.blsToExecutionChange = new BLSToExecutionChangeRepository(config, db);
|
|
72
81
|
this.proposerSlashing = new ProposerSlashingRepository(config, db);
|
|
73
82
|
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);
|
|
74
88
|
|
|
75
89
|
// lightclient
|
|
76
90
|
this.bestLightClientUpdate = new BestLightClientUpdateRepository(config, db);
|
|
@@ -96,40 +110,4 @@ export class BeaconDb implements IBeaconDb {
|
|
|
96
110
|
// TODO: Enable once it's deemed safe
|
|
97
111
|
// await this.block.batchDelete(await this.block.keys());
|
|
98
112
|
}
|
|
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
|
-
}
|
|
135
113
|
}
|
package/src/db/buckets.ts
CHANGED
|
@@ -16,16 +16,14 @@ 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
|
-
|
|
22
|
-
index_depositDataRoot = 9,
|
|
19
|
+
// eth1 processing
|
|
20
|
+
phase0_eth1Data = 8, // timestamp -> Eth1Data
|
|
21
|
+
index_depositDataRoot = 9, // depositIndex -> Root<DepositData>
|
|
23
22
|
|
|
24
23
|
// op pool
|
|
25
24
|
// phase0_attestation = 10, // DEPRECATED on v0.25.0
|
|
26
25
|
// phase0_aggregateAndProof = 11, // Root -> AggregateAndProof, DEPRECATED on v.27.0
|
|
27
|
-
|
|
28
|
-
phase0_depositData = 12,
|
|
26
|
+
phase0_depositData = 12, // [DEPRECATED] index -> DepositData
|
|
29
27
|
phase0_exit = 13, // ValidatorIndex -> VoluntaryExit
|
|
30
28
|
phase0_proposerSlashing = 14, // ValidatorIndex -> ProposerSlashing
|
|
31
29
|
allForks_attesterSlashing = 15, // Root -> AttesterSlashing
|
|
@@ -34,18 +32,15 @@ export enum Bucket {
|
|
|
34
32
|
allForks_checkpointState = 17, // Root -> BeaconState
|
|
35
33
|
|
|
36
34
|
// allForks_pendingBlock = 25, // Root -> SignedBeaconBlock // DEPRECATED on v0.30.0
|
|
37
|
-
|
|
38
|
-
phase0_depositEvent = 19,
|
|
35
|
+
phase0_depositEvent = 19, // depositIndex -> DepositEvent
|
|
39
36
|
|
|
40
37
|
index_stateArchiveRootIndex = 26, // State Root -> slot
|
|
41
38
|
|
|
42
39
|
deneb_blobSidecars = 27, // DENEB BeaconBlockRoot -> BlobSidecars
|
|
43
40
|
deneb_blobSidecarsArchive = 28, // DENEB BeaconBlockSlot -> BlobSidecars
|
|
44
41
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
/** @deprecated Genesis from eth1 is no longer supported, only kept around to delete data from existing databases */
|
|
48
|
-
phase0_preGenesisStateLastProcessedBlock = 31,
|
|
42
|
+
phase0_preGenesisState = 30, // Single = phase0.BeaconState
|
|
43
|
+
phase0_preGenesisStateLastProcessedBlock = 31, // Single = Uint8
|
|
49
44
|
|
|
50
45
|
// Lightclient server
|
|
51
46
|
// altair_bestUpdatePerCommitteePeriod = 30, // DEPRECATED on v0.32.0
|
package/src/db/interface.ts
CHANGED
|
@@ -12,12 +12,16 @@ import {
|
|
|
12
12
|
CheckpointHeaderRepository,
|
|
13
13
|
DataColumnSidecarArchiveRepository,
|
|
14
14
|
DataColumnSidecarRepository,
|
|
15
|
+
DepositDataRootRepository,
|
|
16
|
+
DepositEventRepository,
|
|
17
|
+
Eth1DataRepository,
|
|
15
18
|
ProposerSlashingRepository,
|
|
16
19
|
StateArchiveRepository,
|
|
17
20
|
SyncCommitteeRepository,
|
|
18
21
|
SyncCommitteeWitnessRepository,
|
|
19
22
|
VoluntaryExitRepository,
|
|
20
23
|
} from "./repositories/index.js";
|
|
24
|
+
import {PreGenesisState, PreGenesisStateLastProcessedBlock} from "./single/index.js";
|
|
21
25
|
|
|
22
26
|
/**
|
|
23
27
|
* The DB service manages the data layer of the beacon chain
|
|
@@ -44,8 +48,17 @@ export interface IBeaconDb {
|
|
|
44
48
|
voluntaryExit: VoluntaryExitRepository;
|
|
45
49
|
proposerSlashing: ProposerSlashingRepository;
|
|
46
50
|
attesterSlashing: AttesterSlashingRepository;
|
|
51
|
+
depositEvent: DepositEventRepository;
|
|
47
52
|
blsToExecutionChange: BLSToExecutionChangeRepository;
|
|
48
53
|
|
|
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
|
+
|
|
49
62
|
// lightclient
|
|
50
63
|
bestLightClientUpdate: BestLightClientUpdateRepository;
|
|
51
64
|
checkpointHeader: CheckpointHeaderRepository;
|
|
@@ -56,8 +69,6 @@ export interface IBeaconDb {
|
|
|
56
69
|
|
|
57
70
|
pruneHotDb(): Promise<void>;
|
|
58
71
|
|
|
59
|
-
deleteDeprecatedEth1Data(): Promise<void>;
|
|
60
|
-
|
|
61
72
|
/** Close the connection to the db instance and close the db store. */
|
|
62
73
|
close(): Promise<void>;
|
|
63
74
|
/** To inject metrics after CLI initialization */
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import {ByteVectorType, CompositeViewDU, ListCompositeType} from "@chainsafe/ssz";
|
|
2
|
+
import {ChainForkConfig} from "@lodestar/config";
|
|
3
|
+
import {Db, KeyValue, Repository} from "@lodestar/db";
|
|
4
|
+
import {Root, ssz} from "@lodestar/types";
|
|
5
|
+
import {bytesToInt} from "@lodestar/utils";
|
|
6
|
+
import {Bucket, getBucketNameByValue} from "../buckets.js";
|
|
7
|
+
|
|
8
|
+
// TODO: Review where is best to put this type
|
|
9
|
+
export type DepositTree = CompositeViewDU<ListCompositeType<ByteVectorType>>;
|
|
10
|
+
|
|
11
|
+
export class DepositDataRootRepository extends Repository<number, Root> {
|
|
12
|
+
private depositRootTree?: DepositTree;
|
|
13
|
+
|
|
14
|
+
constructor(config: ChainForkConfig, db: Db) {
|
|
15
|
+
const bucket = Bucket.index_depositDataRoot;
|
|
16
|
+
super(config, db, bucket, ssz.Root, getBucketNameByValue(bucket));
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
decodeKey(data: Buffer): number {
|
|
20
|
+
return bytesToInt(super.decodeKey(data) as unknown as Uint8Array, "be");
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// depositDataRoots stored by depositData index
|
|
24
|
+
getId(_value: Root): number {
|
|
25
|
+
throw new Error("Unable to create depositIndex from root");
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
async put(index: number, value: Root): Promise<void> {
|
|
29
|
+
await super.put(index, value);
|
|
30
|
+
await this.depositRootTreeSet(index, value);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
async batchPut(items: KeyValue<number, Root>[]): Promise<void> {
|
|
34
|
+
await super.batchPut(items);
|
|
35
|
+
for (const {key, value} of items) {
|
|
36
|
+
await this.depositRootTreeSet(key, value);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
async putList(roots: Root[]): Promise<void> {
|
|
41
|
+
await this.batchPut(roots.map((root, index) => ({key: index, value: root})));
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
async batchPutValues(values: {index: number; root: Root}[]): Promise<void> {
|
|
45
|
+
await this.batchPut(
|
|
46
|
+
values.map(({index, root}) => ({
|
|
47
|
+
key: index,
|
|
48
|
+
value: root,
|
|
49
|
+
}))
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
async getDepositRootTree(): Promise<DepositTree> {
|
|
54
|
+
if (!this.depositRootTree) {
|
|
55
|
+
const values = await this.values();
|
|
56
|
+
this.depositRootTree = ssz.phase0.DepositDataRootList.toViewDU(values);
|
|
57
|
+
}
|
|
58
|
+
return this.depositRootTree;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
async getDepositRootTreeAtIndex(depositIndex: number): Promise<DepositTree> {
|
|
62
|
+
const depositRootTree = await this.getDepositRootTree();
|
|
63
|
+
return depositRootTree.sliceTo(depositIndex);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
private async depositRootTreeSet(index: number, value: Uint8Array): Promise<void> {
|
|
67
|
+
const depositRootTree = await this.getDepositRootTree();
|
|
68
|
+
|
|
69
|
+
// TODO: Review and fix properly
|
|
70
|
+
if (index > depositRootTree.length) {
|
|
71
|
+
throw Error(`Error setting depositRootTree index ${index} > length ${depositRootTree.length}`);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (index === depositRootTree.length) {
|
|
75
|
+
depositRootTree.push(value);
|
|
76
|
+
} else {
|
|
77
|
+
depositRootTree.set(index, value);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import {ChainForkConfig} from "@lodestar/config";
|
|
2
|
+
import {Db, Repository} from "@lodestar/db";
|
|
3
|
+
import {phase0, ssz} from "@lodestar/types";
|
|
4
|
+
import {Bucket, getBucketNameByValue} from "../buckets.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* DepositData indexed by deposit index
|
|
8
|
+
* Removed when included on chain or old
|
|
9
|
+
*/
|
|
10
|
+
export class DepositEventRepository extends Repository<number, phase0.DepositEvent> {
|
|
11
|
+
constructor(config: ChainForkConfig, db: Db) {
|
|
12
|
+
const bucket = Bucket.phase0_depositEvent;
|
|
13
|
+
super(config, db, bucket, ssz.phase0.DepositEvent, getBucketNameByValue(bucket));
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
async deleteOld(depositCount: number): Promise<void> {
|
|
17
|
+
const firstDepositIndex = await this.firstKey();
|
|
18
|
+
if (firstDepositIndex === null) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
await this.batchDelete(Array.from({length: depositCount - firstDepositIndex}, (_, i) => i + firstDepositIndex));
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
async batchPutValues(depositEvents: phase0.DepositEvent[]): Promise<void> {
|
|
25
|
+
await this.batchPut(
|
|
26
|
+
depositEvents.map((depositEvent) => ({
|
|
27
|
+
key: depositEvent.index,
|
|
28
|
+
value: depositEvent,
|
|
29
|
+
}))
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
}
|