@lodestar/state-transition 1.51.0-dev.2593063a82 → 1.51.0-dev.2aff7aaeb7
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/block/index.d.ts +1 -1
- package/lib/block/index.d.ts.map +1 -1
- package/lib/block/index.js +2 -2
- package/lib/block/index.js.map +1 -1
- package/lib/block/processAttestationsAltair.d.ts.map +1 -1
- package/lib/block/processAttestationsAltair.js +3 -1
- package/lib/block/processAttestationsAltair.js.map +1 -1
- package/lib/block/processDeposit.d.ts.map +1 -1
- package/lib/block/processDeposit.js +1 -1
- package/lib/block/processDeposit.js.map +1 -1
- package/lib/block/processOperations.d.ts +1 -1
- package/lib/block/processOperations.d.ts.map +1 -1
- package/lib/block/processOperations.js +1 -1
- package/lib/block/processOperations.js.map +1 -1
- package/lib/cache/epochCache.d.ts +5 -2
- package/lib/cache/epochCache.d.ts.map +1 -1
- package/lib/cache/epochCache.js +12 -5
- package/lib/cache/epochCache.js.map +1 -1
- package/lib/cache/epochTransitionCache.d.ts.map +1 -1
- package/lib/cache/epochTransitionCache.js +2 -1
- package/lib/cache/epochTransitionCache.js.map +1 -1
- package/lib/cache/syncCommitteeCache.d.ts +1 -1
- package/lib/cache/syncCommitteeCache.d.ts.map +1 -1
- package/lib/epoch/getRewardsAndPenalties.d.ts.map +1 -1
- package/lib/epoch/getRewardsAndPenalties.js +9 -2
- package/lib/epoch/getRewardsAndPenalties.js.map +1 -1
- package/lib/epoch/index.d.ts +2 -2
- package/lib/epoch/index.d.ts.map +1 -1
- package/lib/epoch/index.js +2 -2
- package/lib/epoch/index.js.map +1 -1
- package/lib/epoch/processSyncCommitteeUpdates.js +1 -1
- package/lib/epoch/processSyncCommitteeUpdates.js.map +1 -1
- package/lib/lightClient/spec/store.d.ts +1 -1
- package/lib/lightClient/spec/store.d.ts.map +1 -1
- package/lib/lightClient/spec/utils.d.ts.map +1 -1
- package/lib/lightClient/spec/utils.js +1 -1
- package/lib/lightClient/spec/utils.js.map +1 -1
- package/lib/lightClient/spec/validateLightClientUpdate.d.ts.map +1 -1
- package/lib/lightClient/spec/validateLightClientUpdate.js +1 -1
- package/lib/lightClient/spec/validateLightClientUpdate.js.map +1 -1
- package/lib/metrics.d.ts +1 -1
- package/lib/metrics.d.ts.map +1 -1
- package/lib/metrics.js +4 -4
- package/lib/metrics.js.map +1 -1
- package/lib/rewards/attestationsRewards.d.ts +1 -1
- package/lib/rewards/attestationsRewards.d.ts.map +1 -1
- package/lib/rewards/attestationsRewards.js +10 -3
- package/lib/rewards/attestationsRewards.js.map +1 -1
- package/lib/rewards/syncCommitteeRewards.d.ts +1 -1
- package/lib/rewards/syncCommitteeRewards.d.ts.map +1 -1
- package/lib/signatureSets/inclusionList.d.ts +5 -0
- package/lib/signatureSets/inclusionList.d.ts.map +1 -0
- package/lib/signatureSets/inclusionList.js +14 -0
- package/lib/signatureSets/inclusionList.js.map +1 -0
- package/lib/signatureSets/index.d.ts +1 -0
- package/lib/signatureSets/index.d.ts.map +1 -1
- package/lib/signatureSets/index.js +1 -0
- package/lib/signatureSets/index.js.map +1 -1
- package/lib/stateTransition.js +2 -2
- package/lib/stateTransition.js.map +1 -1
- package/lib/stateView/beaconStateView.d.ts +1 -0
- package/lib/stateView/beaconStateView.d.ts.map +1 -1
- package/lib/stateView/beaconStateView.js +5 -1
- package/lib/stateView/beaconStateView.js.map +1 -1
- package/lib/stateView/interface.d.ts +2 -4
- package/lib/stateView/interface.d.ts.map +1 -1
- package/lib/stateView/interface.js.map +1 -1
- package/lib/stateView/nativeBeaconStateView.d.ts +15 -7
- package/lib/stateView/nativeBeaconStateView.d.ts.map +1 -1
- package/lib/stateView/nativeBeaconStateView.js +76 -26
- package/lib/stateView/nativeBeaconStateView.js.map +1 -1
- package/lib/stateView/stateViewFactory.d.ts.map +1 -1
- package/lib/stateView/stateViewFactory.js +5 -4
- package/lib/stateView/stateViewFactory.js.map +1 -1
- package/lib/testUtils/interopPubkeyCache.js +1 -1
- package/lib/testUtils/interopPubkeyCache.js.map +1 -1
- package/lib/testUtils/state.d.ts.map +1 -1
- package/lib/testUtils/state.js +1 -1
- package/lib/testUtils/state.js.map +1 -1
- package/lib/testUtils/util.d.ts +1 -1
- package/lib/testUtils/util.d.ts.map +1 -1
- package/lib/testUtils/util.js +2 -2
- package/lib/testUtils/util.js.map +1 -1
- package/lib/util/altair.d.ts +3 -1
- package/lib/util/altair.d.ts.map +1 -1
- package/lib/util/altair.js +7 -4
- package/lib/util/altair.js.map +1 -1
- package/lib/util/blindedBlock.d.ts.map +1 -1
- package/lib/util/blindedBlock.js +4 -12
- package/lib/util/blindedBlock.js.map +1 -1
- package/lib/util/clock.js +1 -1
- package/lib/util/clock.js.map +1 -1
- package/lib/util/epochShuffling.d.ts.map +1 -1
- package/lib/util/epochShuffling.js +1 -1
- package/lib/util/epochShuffling.js.map +1 -1
- package/lib/util/inclusionListCommittee.d.ts +9 -0
- package/lib/util/inclusionListCommittee.d.ts.map +1 -0
- package/lib/util/inclusionListCommittee.js +18 -0
- package/lib/util/inclusionListCommittee.js.map +1 -0
- package/lib/util/index.d.ts +1 -0
- package/lib/util/index.d.ts.map +1 -1
- package/lib/util/index.js +1 -0
- package/lib/util/index.js.map +1 -1
- package/lib/util/interop.d.ts +1 -1
- package/lib/util/interop.d.ts.map +1 -1
- package/lib/util/interop.js +1 -1
- package/lib/util/interop.js.map +1 -1
- package/lib/util/seed.js +1 -1
- package/lib/util/seed.js.map +1 -1
- package/lib/util/shuffling.d.ts +3 -0
- package/lib/util/shuffling.d.ts.map +1 -1
- package/lib/util/shuffling.js +41 -1
- package/lib/util/shuffling.js.map +1 -1
- package/lib/util/signatureSets.d.ts +1 -1
- package/lib/util/signatureSets.d.ts.map +1 -1
- package/lib/util/signatureSets.js +1 -1
- package/lib/util/signatureSets.js.map +1 -1
- package/lib/util/slot.d.ts +15 -1
- package/lib/util/slot.d.ts.map +1 -1
- package/lib/util/slot.js +66 -6
- package/lib/util/slot.js.map +1 -1
- package/lib/util/syncCommittee.d.ts +4 -3
- package/lib/util/syncCommittee.d.ts.map +1 -1
- package/lib/util/syncCommittee.js +10 -8
- package/lib/util/syncCommittee.js.map +1 -1
- package/lib/util/validator.d.ts +1 -1
- package/lib/util/validator.d.ts.map +1 -1
- package/lib/util/validator.js +32 -11
- package/lib/util/validator.js.map +1 -1
- package/lib/util/weakSubjectivity.d.ts.map +1 -1
- package/lib/util/weakSubjectivity.js +4 -3
- package/lib/util/weakSubjectivity.js.map +1 -1
- package/package.json +9 -9
- package/src/block/index.ts +11 -12
- package/src/block/processAttestationsAltair.ts +4 -1
- package/src/block/processDeposit.ts +2 -2
- package/src/block/processOperations.ts +5 -5
- package/src/cache/epochCache.ts +30 -6
- package/src/cache/epochTransitionCache.ts +2 -1
- package/src/cache/syncCommitteeCache.ts +1 -1
- package/src/epoch/getRewardsAndPenalties.ts +11 -1
- package/src/epoch/index.ts +14 -15
- package/src/epoch/processSyncCommitteeUpdates.ts +1 -1
- package/src/lightClient/spec/store.ts +1 -1
- package/src/lightClient/spec/utils.ts +1 -1
- package/src/lightClient/spec/validateLightClientUpdate.ts +1 -1
- package/src/metrics.ts +5 -4
- package/src/rewards/attestationsRewards.ts +13 -2
- package/src/rewards/syncCommitteeRewards.ts +1 -1
- package/src/signatureSets/inclusionList.ts +20 -0
- package/src/signatureSets/index.ts +1 -0
- package/src/stateTransition.ts +2 -2
- package/src/stateView/beaconStateView.ts +5 -1
- package/src/stateView/interface.ts +1 -12
- package/src/stateView/nativeBeaconStateView.ts +77 -33
- package/src/stateView/stateViewFactory.ts +5 -4
- package/src/testUtils/interopPubkeyCache.ts +1 -1
- package/src/testUtils/state.ts +1 -1
- package/src/testUtils/util.ts +2 -2
- package/src/util/altair.ts +15 -4
- package/src/util/blindedBlock.ts +4 -12
- package/src/util/clock.ts +1 -1
- package/src/util/epochShuffling.ts +1 -1
- package/src/util/inclusionListCommittee.ts +17 -0
- package/src/util/index.ts +1 -0
- package/src/util/interop.ts +1 -1
- package/src/util/seed.ts +1 -1
- package/src/util/shuffling.ts +46 -1
- package/src/util/signatureSets.ts +1 -1
- package/src/util/slot.ts +72 -7
- package/src/util/syncCommittee.ts +22 -10
- package/src/util/validator.ts +47 -20
- package/src/util/weakSubjectivity.ts +3 -3
package/src/util/validator.ts
CHANGED
|
@@ -2,6 +2,7 @@ import {ChainForkConfig} from "@lodestar/config";
|
|
|
2
2
|
import {
|
|
3
3
|
EFFECTIVE_BALANCE_INCREMENT,
|
|
4
4
|
ForkSeq,
|
|
5
|
+
GENESIS_EPOCH,
|
|
5
6
|
MAX_EFFECTIVE_BALANCE,
|
|
6
7
|
MAX_EFFECTIVE_BALANCE_ELECTRA,
|
|
7
8
|
MIN_ACTIVATION_BALANCE,
|
|
@@ -11,6 +12,7 @@ import {intDiv} from "@lodestar/utils";
|
|
|
11
12
|
import {BeaconStateAllForks, CachedBeaconStateElectra, CachedBeaconStateGloas, EpochCache} from "../types.js";
|
|
12
13
|
import {hasEth1WithdrawalCredential} from "./capella.js";
|
|
13
14
|
import {hasCompoundingWithdrawalCredential, hasExecutionWithdrawalCredential} from "./electra.js";
|
|
15
|
+
import {getSlotDurationMsAtEpoch} from "./slot.js";
|
|
14
16
|
|
|
15
17
|
/**
|
|
16
18
|
* Check if [[validator]] is active
|
|
@@ -93,23 +95,35 @@ export function getActivationExitChurnLimit(epochCtx: EpochCache): number {
|
|
|
93
95
|
* https://github.com/ethereum/consensus-specs/blob/v1.7.0-alpha.6/specs/gloas/beacon-chain.md#new-get_activation_churn_limit
|
|
94
96
|
*/
|
|
95
97
|
export function getActivationChurnLimit(epochCtx: EpochCache): number {
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
98
|
+
const {config, epoch, totalActiveBalanceIncrements} = epochCtx;
|
|
99
|
+
const churnByBalance = Math.floor(
|
|
100
|
+
(totalActiveBalanceIncrements / config.CHURN_LIMIT_QUOTIENT_GLOAS) * EFFECTIVE_BALANCE_INCREMENT
|
|
101
|
+
);
|
|
102
|
+
const churn = Math.min(
|
|
103
|
+
config.MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT_GLOAS,
|
|
104
|
+
Math.max(churnByBalance, config.MIN_PER_EPOCH_CHURN_LIMIT_ELECTRA)
|
|
100
105
|
);
|
|
101
|
-
|
|
106
|
+
// Scale by the slot duration ratio, rounding to the increment once after scaling
|
|
107
|
+
const scaled = Math.floor(
|
|
108
|
+
(churn * getSlotDurationMsAtEpoch(config, epoch)) / getSlotDurationMsAtEpoch(config, GENESIS_EPOCH)
|
|
109
|
+
);
|
|
110
|
+
return scaled - (scaled % EFFECTIVE_BALANCE_INCREMENT);
|
|
102
111
|
}
|
|
103
112
|
|
|
104
113
|
/**
|
|
105
114
|
* https://github.com/ethereum/consensus-specs/blob/v1.7.0-alpha.6/specs/gloas/beacon-chain.md#new-get_exit_churn_limit
|
|
106
115
|
*/
|
|
107
116
|
export function getExitChurnLimit(epochCtx: EpochCache): number {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
117
|
+
const {config, epoch, totalActiveBalanceIncrements} = epochCtx;
|
|
118
|
+
const churnByBalance = Math.floor(
|
|
119
|
+
(totalActiveBalanceIncrements / config.CHURN_LIMIT_QUOTIENT_GLOAS) * EFFECTIVE_BALANCE_INCREMENT
|
|
120
|
+
);
|
|
121
|
+
const churn = Math.max(churnByBalance, config.MIN_PER_EPOCH_CHURN_LIMIT_ELECTRA);
|
|
122
|
+
// Scale by the slot duration ratio, rounding to the increment once after scaling
|
|
123
|
+
const scaled = Math.floor(
|
|
124
|
+
(churn * getSlotDurationMsAtEpoch(config, epoch)) / getSlotDurationMsAtEpoch(config, GENESIS_EPOCH)
|
|
112
125
|
);
|
|
126
|
+
return scaled - (scaled % EFFECTIVE_BALANCE_INCREMENT);
|
|
113
127
|
}
|
|
114
128
|
|
|
115
129
|
/**
|
|
@@ -118,12 +132,16 @@ export function getExitChurnLimit(epochCtx: EpochCache): number {
|
|
|
118
132
|
*/
|
|
119
133
|
export function getConsolidationChurnLimit(fork: ForkSeq, epochCtx: EpochCache): number {
|
|
120
134
|
if (fork >= ForkSeq.gloas) {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
0
|
|
135
|
+
const {config, epoch, totalActiveBalanceIncrements} = epochCtx;
|
|
136
|
+
// No MIN floor in gloas
|
|
137
|
+
const churn = Math.floor(
|
|
138
|
+
(totalActiveBalanceIncrements / config.CONSOLIDATION_CHURN_LIMIT_QUOTIENT) * EFFECTIVE_BALANCE_INCREMENT
|
|
126
139
|
);
|
|
140
|
+
// Scale by the slot duration ratio, rounding to the increment once after scaling
|
|
141
|
+
const scaled = Math.floor(
|
|
142
|
+
(churn * getSlotDurationMsAtEpoch(config, epoch)) / getSlotDurationMsAtEpoch(config, GENESIS_EPOCH)
|
|
143
|
+
);
|
|
144
|
+
return scaled - (scaled % EFFECTIVE_BALANCE_INCREMENT);
|
|
127
145
|
}
|
|
128
146
|
return getBalanceChurnLimitFromCache(epochCtx) - getActivationExitChurnLimit(epochCtx);
|
|
129
147
|
}
|
|
@@ -131,17 +149,26 @@ export function getConsolidationChurnLimit(fork: ForkSeq, epochCtx: EpochCache):
|
|
|
131
149
|
// NOTE: duplicates the quotient/min choices in get{Exit,Activation,Consolidation}ChurnLimit.
|
|
132
150
|
export function getGloasChurnLimits(
|
|
133
151
|
config: ChainForkConfig,
|
|
152
|
+
epoch: Epoch,
|
|
134
153
|
totalActiveBalanceIncrements: number
|
|
135
154
|
): {exit: number; activation: number; consolidation: number} {
|
|
136
|
-
const
|
|
137
|
-
|
|
138
|
-
|
|
155
|
+
const ratioNumerator = getSlotDurationMsAtEpoch(config, epoch);
|
|
156
|
+
const ratioDenominator = getSlotDurationMsAtEpoch(config, GENESIS_EPOCH);
|
|
157
|
+
const exitUnscaled = Math.max(
|
|
158
|
+
Math.floor((totalActiveBalanceIncrements / config.CHURN_LIMIT_QUOTIENT_GLOAS) * EFFECTIVE_BALANCE_INCREMENT),
|
|
139
159
|
config.MIN_PER_EPOCH_CHURN_LIMIT_ELECTRA
|
|
140
160
|
);
|
|
161
|
+
const activationUnscaled = Math.min(config.MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT_GLOAS, exitUnscaled);
|
|
162
|
+
const consolidationUnscaled = Math.floor(
|
|
163
|
+
(totalActiveBalanceIncrements / config.CONSOLIDATION_CHURN_LIMIT_QUOTIENT) * EFFECTIVE_BALANCE_INCREMENT
|
|
164
|
+
);
|
|
165
|
+
const exit = Math.floor((exitUnscaled * ratioNumerator) / ratioDenominator);
|
|
166
|
+
const activation = Math.floor((activationUnscaled * ratioNumerator) / ratioDenominator);
|
|
167
|
+
const consolidation = Math.floor((consolidationUnscaled * ratioNumerator) / ratioDenominator);
|
|
141
168
|
return {
|
|
142
|
-
exit,
|
|
143
|
-
activation:
|
|
144
|
-
consolidation:
|
|
169
|
+
exit: exit - (exit % EFFECTIVE_BALANCE_INCREMENT),
|
|
170
|
+
activation: activation - (activation % EFFECTIVE_BALANCE_INCREMENT),
|
|
171
|
+
consolidation: consolidation - (consolidation % EFFECTIVE_BALANCE_INCREMENT),
|
|
145
172
|
};
|
|
146
173
|
}
|
|
147
174
|
|
|
@@ -2,7 +2,6 @@ import {ChainForkConfig} from "@lodestar/config";
|
|
|
2
2
|
import {
|
|
3
3
|
EFFECTIVE_BALANCE_INCREMENT,
|
|
4
4
|
ForkSeq,
|
|
5
|
-
GENESIS_SLOT,
|
|
6
5
|
MAX_DEPOSITS,
|
|
7
6
|
MAX_EFFECTIVE_BALANCE,
|
|
8
7
|
SLOTS_PER_EPOCH,
|
|
@@ -13,6 +12,7 @@ import {Epoch, Root, Slot, TimeSeconds, ssz} from "@lodestar/types";
|
|
|
13
12
|
import {ZERO_HASH} from "../constants/constants.js";
|
|
14
13
|
import {BeaconStateAllForks, CachedBeaconStateAllForks} from "../types.js";
|
|
15
14
|
import {computeCheckpointEpochAtStateSlot, computeEpochAtSlot, getCurrentEpoch} from "./epoch.js";
|
|
15
|
+
import {computeSlotAtTimeMs} from "./slot.js";
|
|
16
16
|
import {StateBytesMetadata, getStateTypeFromBytes, scanActiveValidatorsFromStateBytes} from "./sszBytes.js";
|
|
17
17
|
import {
|
|
18
18
|
getActivationChurnLimit,
|
|
@@ -107,7 +107,7 @@ function computeWeakSubjectivityPeriodFromActiveValidators(
|
|
|
107
107
|
): number {
|
|
108
108
|
const fork = config.getForkName(slot);
|
|
109
109
|
|
|
110
|
-
const churnLimitsGloas = getGloasChurnLimits(config, totalActiveBalanceIncrements);
|
|
110
|
+
const churnLimitsGloas = getGloasChurnLimits(config, computeEpochAtSlot(slot), totalActiveBalanceIncrements);
|
|
111
111
|
|
|
112
112
|
return isForkPostGloas(fork)
|
|
113
113
|
? computeWeakSubjectivityPeriodFromConstituentsGloas(
|
|
@@ -223,6 +223,6 @@ export function isWithinWeakSubjectivityPeriodFromSummary(
|
|
|
223
223
|
summary: WeakSubjectivitySummary,
|
|
224
224
|
now: TimeSeconds = Date.now() / 1000
|
|
225
225
|
): boolean {
|
|
226
|
-
const clockSlot =
|
|
226
|
+
const clockSlot = computeSlotAtTimeMs(config, now * 1000, summary.genesisTime * 1000);
|
|
227
227
|
return computeEpochAtSlot(clockSlot) <= summary.checkpointEpoch + summary.period;
|
|
228
228
|
}
|