@lodestar/state-transition 1.46.0-dev.e00bf67333 → 1.46.0-dev.e6f04acd82
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/externalData.js +2 -4
- package/lib/block/externalData.js.map +1 -1
- package/lib/block/index.d.ts.map +1 -1
- package/lib/block/index.js +3 -2
- package/lib/block/index.js.map +1 -1
- package/lib/block/initiateValidatorExit.js.map +1 -1
- package/lib/block/isValidIndexedAttestation.js.map +1 -1
- package/lib/block/isValidIndexedPayloadAttestation.js.map +1 -1
- package/lib/block/processAttestationPhase0.js.map +1 -1
- package/lib/block/processAttestations.d.ts +2 -2
- package/lib/block/processAttestations.d.ts.map +1 -1
- package/lib/block/processAttestations.js +2 -2
- package/lib/block/processAttestations.js.map +1 -1
- package/lib/block/processAttestationsAltair.d.ts +3 -3
- package/lib/block/processAttestationsAltair.d.ts.map +1 -1
- package/lib/block/processAttestationsAltair.js +7 -4
- package/lib/block/processAttestationsAltair.js.map +1 -1
- package/lib/block/processAttesterSlashing.js.map +1 -1
- package/lib/block/processBlobKzgCommitments.js.map +1 -1
- package/lib/block/processBlockHeader.js.map +1 -1
- package/lib/block/processBlsToExecutionChange.js.map +1 -1
- package/lib/block/processBuilderDepositRequest.js.map +1 -1
- package/lib/block/processBuilderExitRequest.js.map +1 -1
- package/lib/block/processConsolidationRequest.js.map +1 -1
- package/lib/block/processDeposit.js.map +1 -1
- package/lib/block/processDepositRequest.js.map +1 -1
- package/lib/block/processEth1Data.js.map +1 -1
- package/lib/block/processExecutionPayload.js.map +1 -1
- package/lib/block/processExecutionPayloadBid.d.ts +3 -3
- package/lib/block/processExecutionPayloadBid.d.ts.map +1 -1
- package/lib/block/processExecutionPayloadBid.js +10 -3
- package/lib/block/processExecutionPayloadBid.js.map +1 -1
- package/lib/block/processOperations.d.ts +2 -2
- package/lib/block/processOperations.d.ts.map +1 -1
- package/lib/block/processOperations.js +2 -2
- package/lib/block/processOperations.js.map +1 -1
- package/lib/block/processParentExecutionPayload.js.map +1 -1
- package/lib/block/processPayloadAttestation.js.map +1 -1
- package/lib/block/processProposerSlashing.js.map +1 -1
- package/lib/block/processRandao.js.map +1 -1
- package/lib/block/processSyncCommittee.js.map +1 -1
- package/lib/block/processVoluntaryExit.js +1 -2
- package/lib/block/processVoluntaryExit.js.map +1 -1
- package/lib/block/processWithdrawalRequest.d.ts.map +1 -1
- package/lib/block/processWithdrawalRequest.js +2 -2
- package/lib/block/processWithdrawalRequest.js.map +1 -1
- package/lib/block/processWithdrawals.js.map +1 -1
- package/lib/block/slashValidator.js.map +1 -1
- package/lib/block/types.js +1 -2
- package/lib/block/types.js.map +1 -1
- package/lib/cache/effectiveBalanceIncrements.js.map +1 -1
- package/lib/cache/epochCache.js +1 -2
- package/lib/cache/epochCache.js.map +1 -1
- package/lib/cache/epochTransitionCache.js.map +1 -1
- package/lib/cache/pubkeyCache.js.map +1 -1
- package/lib/cache/rewardCache.js.map +1 -1
- package/lib/cache/stateCache.d.ts +2 -1
- package/lib/cache/stateCache.d.ts.map +1 -1
- package/lib/cache/stateCache.js +3 -2
- package/lib/cache/stateCache.js.map +1 -1
- package/lib/cache/syncCommitteeCache.js.map +1 -1
- package/lib/cache/types.d.ts +1 -0
- package/lib/cache/types.d.ts.map +1 -1
- package/lib/epoch/computeUnrealizedCheckpoints.js.map +1 -1
- package/lib/epoch/getAttestationDeltas.js.map +1 -1
- package/lib/epoch/getRewardsAndPenalties.js.map +1 -1
- package/lib/epoch/index.js +1 -2
- package/lib/epoch/index.js.map +1 -1
- package/lib/epoch/processBuilderPendingPayments.js.map +1 -1
- package/lib/epoch/processEffectiveBalanceUpdates.js.map +1 -1
- package/lib/epoch/processEth1DataReset.js.map +1 -1
- package/lib/epoch/processHistoricalRootsUpdate.js.map +1 -1
- package/lib/epoch/processHistoricalSummariesUpdate.js.map +1 -1
- package/lib/epoch/processInactivityUpdates.js.map +1 -1
- package/lib/epoch/processJustificationAndFinalization.js.map +1 -1
- package/lib/epoch/processParticipationFlagUpdates.js.map +1 -1
- package/lib/epoch/processParticipationRecordUpdates.js.map +1 -1
- package/lib/epoch/processPendingAttestations.js.map +1 -1
- package/lib/epoch/processPendingConsolidations.js.map +1 -1
- package/lib/epoch/processPendingDeposits.js.map +1 -1
- package/lib/epoch/processProposerLookahead.js.map +1 -1
- package/lib/epoch/processPtcWindow.js.map +1 -1
- package/lib/epoch/processRandaoMixesReset.js.map +1 -1
- package/lib/epoch/processRegistryUpdates.js.map +1 -1
- package/lib/epoch/processRewardsAndPenalties.js.map +1 -1
- package/lib/epoch/processSlashings.js.map +1 -1
- package/lib/epoch/processSlashingsReset.js.map +1 -1
- package/lib/epoch/processSyncCommitteeUpdates.js.map +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/lightClient/proofs.js.map +1 -1
- package/lib/lightClient/spec/index.js.map +1 -1
- package/lib/lightClient/spec/isBetterUpdate.js.map +1 -1
- package/lib/lightClient/spec/processLightClientUpdate.js.map +1 -1
- package/lib/lightClient/spec/store.js.map +1 -1
- package/lib/lightClient/spec/utils.d.ts +0 -2
- package/lib/lightClient/spec/utils.d.ts.map +1 -1
- package/lib/lightClient/spec/utils.js +8 -2
- package/lib/lightClient/spec/utils.js.map +1 -1
- package/lib/lightClient/spec/validateLightClientBootstrap.js.map +1 -1
- package/lib/lightClient/spec/validateLightClientUpdate.js.map +1 -1
- package/lib/metrics.d.ts.map +1 -1
- package/lib/metrics.js +3 -2
- package/lib/metrics.js.map +1 -1
- package/lib/rewards/attestationsRewards.js.map +1 -1
- package/lib/rewards/blockRewards.d.ts.map +1 -1
- package/lib/rewards/blockRewards.js +7 -4
- package/lib/rewards/blockRewards.js.map +1 -1
- package/lib/rewards/syncCommitteeRewards.js.map +1 -1
- package/lib/signatureSets/attesterSlashings.js.map +1 -1
- package/lib/signatureSets/blsToExecutionChange.js.map +1 -1
- package/lib/signatureSets/executionPayloadBid.d.ts +2 -2
- package/lib/signatureSets/executionPayloadBid.d.ts.map +1 -1
- package/lib/signatureSets/executionPayloadBid.js +7 -5
- package/lib/signatureSets/executionPayloadBid.js.map +1 -1
- package/lib/signatureSets/executionPayloadEnvelope.js.map +1 -1
- package/lib/signatureSets/index.js.map +1 -1
- package/lib/signatureSets/indexedAttestation.js.map +1 -1
- package/lib/signatureSets/indexedPayloadAttestation.js.map +1 -1
- package/lib/signatureSets/proposer.js.map +1 -1
- package/lib/signatureSets/proposerPreferences.js.map +1 -1
- package/lib/signatureSets/proposerSlashings.js.map +1 -1
- package/lib/signatureSets/randao.js.map +1 -1
- package/lib/signatureSets/voluntaryExits.js.map +1 -1
- package/lib/slot/index.d.ts +1 -0
- package/lib/slot/index.d.ts.map +1 -1
- package/lib/slot/index.js +1 -0
- package/lib/slot/index.js.map +1 -1
- package/lib/slot/upgradeStateToAltair.js +1 -1
- package/lib/slot/upgradeStateToAltair.js.map +1 -1
- package/lib/slot/upgradeStateToBellatrix.js.map +1 -1
- package/lib/slot/upgradeStateToCapella.js.map +1 -1
- package/lib/slot/upgradeStateToDeneb.js.map +1 -1
- package/lib/slot/upgradeStateToElectra.js.map +1 -1
- package/lib/slot/upgradeStateToFulu.js.map +1 -1
- package/lib/slot/upgradeStateToGloas.js +1 -1
- package/lib/slot/upgradeStateToGloas.js.map +1 -1
- package/lib/slot/upgradeStateToHeze.d.ts +7 -0
- package/lib/slot/upgradeStateToHeze.d.ts.map +1 -0
- package/lib/slot/upgradeStateToHeze.js +83 -0
- package/lib/slot/upgradeStateToHeze.js.map +1 -0
- package/lib/stateTransition.d.ts.map +1 -1
- package/lib/stateTransition.js +6 -5
- package/lib/stateTransition.js.map +1 -1
- package/lib/stateView/beaconStateView.js.map +1 -1
- package/lib/stateView/interface.d.ts +8 -3
- package/lib/stateView/interface.d.ts.map +1 -1
- package/lib/stateView/interface.js +4 -1
- package/lib/stateView/interface.js.map +1 -1
- package/lib/stateView/nativeBeaconStateView.js.map +1 -1
- package/lib/stateView/stateViewFactory.js.map +1 -1
- package/lib/testUtils/infura.js.map +1 -1
- package/lib/testUtils/interop.js.map +1 -1
- package/lib/testUtils/params.d.ts.map +1 -1
- package/lib/testUtils/state.js +1 -1
- package/lib/testUtils/state.js.map +1 -1
- package/lib/testUtils/testFileCache.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/types.d.ts +2 -2
- package/lib/types.d.ts.map +1 -1
- package/lib/util/aggregator.js.map +1 -1
- package/lib/util/altair.js.map +1 -1
- package/lib/util/array.js.map +1 -1
- package/lib/util/attestation.js.map +1 -1
- package/lib/util/attesterStatus.js.map +1 -1
- package/lib/util/balance.js.map +1 -1
- package/lib/util/blindedBlock.js.map +1 -1
- package/lib/util/blockRoot.js.map +1 -1
- package/lib/util/capella.js.map +1 -1
- package/lib/util/clock.d.ts +61 -0
- package/lib/util/clock.d.ts.map +1 -0
- package/lib/util/clock.js +141 -0
- package/lib/util/clock.js.map +1 -0
- package/lib/util/computeAnchorCheckpoint.js.map +1 -1
- package/lib/util/deposit.d.ts.map +1 -1
- package/lib/util/deposit.js +10 -8
- package/lib/util/deposit.js.map +1 -1
- package/lib/util/domain.js.map +1 -1
- package/lib/util/electra.js.map +1 -1
- package/lib/util/epoch.js.map +1 -1
- package/lib/util/epochShuffling.js.map +1 -1
- package/lib/util/execution.js.map +1 -1
- package/lib/util/finality.js.map +1 -1
- package/lib/util/fulu.js.map +1 -1
- package/lib/util/genesis.d.ts.map +1 -1
- package/lib/util/genesis.js +7 -2
- package/lib/util/genesis.js.map +1 -1
- package/lib/util/gloas.d.ts +2 -1
- package/lib/util/gloas.d.ts.map +1 -1
- package/lib/util/gloas.js +7 -4
- package/lib/util/gloas.js.map +1 -1
- 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.js.map +1 -1
- package/lib/util/loadState/findModifiedInactivityScores.js.map +1 -1
- package/lib/util/loadState/findModifiedValidators.js.map +1 -1
- package/lib/util/loadState/loadState.d.ts.map +1 -1
- package/lib/util/loadState/loadState.js +36 -5
- package/lib/util/loadState/loadState.js.map +1 -1
- package/lib/util/loadState/loadValidator.js.map +1 -1
- package/lib/util/pendingDepositsLookup.js.map +1 -1
- package/lib/util/rootCache.js.map +1 -1
- package/lib/util/seed.js.map +1 -1
- package/lib/util/shuffling.js +1 -2
- package/lib/util/shuffling.js.map +1 -1
- package/lib/util/signatureSets.js +1 -2
- package/lib/util/signatureSets.js.map +1 -1
- package/lib/util/signingRoot.js.map +1 -1
- package/lib/util/slot.js.map +1 -1
- package/lib/util/ssz.d.ts +5 -0
- package/lib/util/ssz.d.ts.map +1 -1
- package/lib/util/ssz.js +8 -1
- package/lib/util/ssz.js.map +1 -1
- package/lib/util/sszBytes.js.map +1 -1
- package/lib/util/syncCommittee.js.map +1 -1
- package/lib/util/targetUnslashedBalance.js.map +1 -1
- package/lib/util/validator.d.ts +5 -0
- package/lib/util/validator.d.ts.map +1 -1
- package/lib/util/validator.js +9 -0
- package/lib/util/validator.js.map +1 -1
- package/lib/util/weakSubjectivity.d.ts +1 -0
- package/lib/util/weakSubjectivity.d.ts.map +1 -1
- package/lib/util/weakSubjectivity.js +20 -8
- package/lib/util/weakSubjectivity.js.map +1 -1
- package/package.json +9 -9
- package/src/block/index.ts +4 -3
- package/src/block/processAttestations.ts +10 -2
- package/src/block/processAttestationsAltair.ts +10 -4
- package/src/block/processExecutionPayloadBid.ts +22 -9
- package/src/block/processOperations.ts +3 -2
- package/src/block/processWithdrawalRequest.ts +6 -2
- package/src/cache/stateCache.ts +5 -2
- package/src/cache/types.ts +1 -0
- package/src/index.ts +4 -0
- package/src/lightClient/spec/utils.ts +9 -2
- package/src/metrics.ts +3 -2
- package/src/rewards/blockRewards.ts +20 -5
- package/src/signatureSets/executionPayloadBid.ts +7 -9
- package/src/slot/index.ts +1 -0
- package/src/slot/upgradeStateToAltair.ts +1 -0
- package/src/slot/upgradeStateToGloas.ts +1 -1
- package/src/slot/upgradeStateToHeze.ts +91 -0
- package/src/stateTransition.ts +5 -0
- package/src/stateView/interface.ts +13 -2
- package/src/testUtils/state.ts +1 -1
- package/src/testUtils/util.ts +2 -2
- package/src/types.ts +2 -0
- package/src/util/clock.ts +183 -0
- package/src/util/deposit.ts +11 -9
- package/src/util/genesis.ts +8 -2
- package/src/util/gloas.ts +9 -5
- package/src/util/index.ts +1 -0
- package/src/util/loadState/loadState.ts +50 -11
- package/src/util/ssz.ts +9 -1
- package/src/util/validator.ts +17 -0
- package/src/util/weakSubjectivity.ts +61 -22
|
@@ -24,6 +24,7 @@ export declare function computeWeakSubjectivityPeriodCachedState(config: ChainFo
|
|
|
24
24
|
export declare function computeWeakSubjectivityPeriod(config: ChainForkConfig, state: BeaconStateAllForks): number;
|
|
25
25
|
export declare function computeWeakSubjectivityPeriodFromConstituentsPhase0(activeValidatorCount: number, totalBalanceByIncrement: number, churnLimit: number, minWithdrawabilityDelay: number): number;
|
|
26
26
|
export declare function computeWeakSubjectivityPeriodFromConstituentsElectra(totalBalanceByIncrement: number, balanceChurnLimit: number, minWithdrawabilityDelay: number): number;
|
|
27
|
+
export declare function computeWeakSubjectivityPeriodFromConstituentsGloas(totalBalanceByIncrement: number, exitChurnLimit: number, activationChurnLimit: number, consolidationChurnLimit: number, minWithdrawabilityDelay: number): number;
|
|
27
28
|
export declare function getLatestBlockRoot(state: BeaconStateAllForks): Root;
|
|
28
29
|
export declare function isWithinWeakSubjectivityPeriod(config: BeaconConfig, wsState: BeaconStateAllForks, wsCheckpoint: Checkpoint): boolean;
|
|
29
30
|
export declare function ensureWithinWeakSubjectivityPeriod(config: BeaconConfig, wsState: BeaconStateAllForks, wsCheckpoint: Checkpoint): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"weakSubjectivity.d.ts","sourceRoot":"","sources":["../../src/util/weakSubjectivity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAE,eAAe,EAAC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"weakSubjectivity.d.ts","sourceRoot":"","sources":["../../src/util/weakSubjectivity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAE,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAU/D,OAAO,EAAC,KAAK,EAAE,IAAI,EAAM,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAGlD,OAAO,EAAC,mBAAmB,EAAE,yBAAyB,EAAC,MAAM,aAAa,CAAC;AAc3E,eAAO,MAAM,WAAW,QAAU,CAAC;AAGnC;;;GAGG;AACH,wBAAgB,wCAAwC,CACtD,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,yBAAyB,GAC/B,KAAK,CAEP;AAED;;;;;;;GAOG;AACH,wBAAgB,wCAAwC,CACtD,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,yBAAyB,GAC/B,MAAM,CAwBR;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,mBAAmB,GAAG,MAAM,CAuCzG;AAED,wBAAgB,mDAAmD,CACjE,oBAAoB,EAAE,MAAM,EAC5B,uBAAuB,EAAE,MAAM,EAC/B,UAAU,EAAE,MAAM,EAClB,uBAAuB,EAAE,MAAM,GAC9B,MAAM,CAuBR;AAED,wBAAgB,oDAAoD,CAClE,uBAAuB,EAAE,MAAM,EAE/B,iBAAiB,EAAE,MAAM,EACzB,uBAAuB,EAAE,MAAM,GAC9B,MAAM,CAOR;AAED,wBAAgB,kDAAkD,CAChE,uBAAuB,EAAE,MAAM,EAC/B,cAAc,EAAE,MAAM,EACtB,oBAAoB,EAAE,MAAM,EAC5B,uBAAuB,EAAE,MAAM,EAC/B,uBAAuB,EAAE,MAAM,GAC9B,MAAM,CAOR;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI,CAMnE;AAED,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,mBAAmB,EAC5B,YAAY,EAAE,UAAU,GACvB,OAAO,CAOT;AAED,wBAAgB,kCAAkC,CAChD,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,mBAAmB,EAC5B,YAAY,EAAE,UAAU,GACvB,IAAI,CAgBN"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { EFFECTIVE_BALANCE_INCREMENT, MAX_DEPOSITS, MAX_EFFECTIVE_BALANCE, SLOTS_PER_EPOCH, isForkPostElectra, } from "@lodestar/params";
|
|
1
|
+
import { EFFECTIVE_BALANCE_INCREMENT, ForkSeq, MAX_DEPOSITS, MAX_EFFECTIVE_BALANCE, SLOTS_PER_EPOCH, isForkPostElectra, isForkPostGloas, } from "@lodestar/params";
|
|
2
2
|
import { ssz } from "@lodestar/types";
|
|
3
3
|
import { toRootHex } from "@lodestar/utils";
|
|
4
4
|
import { ZERO_HASH } from "../constants/constants.js";
|
|
5
5
|
import { computeCheckpointEpochAtStateSlot, computeEpochAtSlot, getCurrentEpoch } from "./epoch.js";
|
|
6
6
|
import { getCurrentSlot } from "./slot.js";
|
|
7
|
-
import { getActiveValidatorIndices, getBalanceChurnLimit, getBalanceChurnLimitFromCache, getChurnLimit, } from "./validator.js";
|
|
7
|
+
import { getActivationChurnLimit, getActiveValidatorIndices, getBalanceChurnLimit, getBalanceChurnLimitFromCache, getChurnLimit, getConsolidationChurnLimit, getExitChurnLimit, getGloasChurnLimits, } from "./validator.js";
|
|
8
8
|
export const ETH_TO_GWEI = 10 ** 9;
|
|
9
9
|
const SAFETY_DECAY = 10;
|
|
10
10
|
/**
|
|
@@ -25,9 +25,11 @@ export function getLatestWeakSubjectivityCheckpointEpoch(config, state) {
|
|
|
25
25
|
export function computeWeakSubjectivityPeriodCachedState(config, state) {
|
|
26
26
|
const activeValidatorCount = state.epochCtx.currentShuffling.activeIndices.length;
|
|
27
27
|
const fork = config.getForkName(state.slot);
|
|
28
|
-
return
|
|
29
|
-
?
|
|
30
|
-
:
|
|
28
|
+
return isForkPostGloas(fork)
|
|
29
|
+
? computeWeakSubjectivityPeriodFromConstituentsGloas(state.epochCtx.totalActiveBalanceIncrements, getExitChurnLimit(state.epochCtx), getActivationChurnLimit(state.epochCtx), getConsolidationChurnLimit(ForkSeq.gloas, state.epochCtx), config.MIN_VALIDATOR_WITHDRAWABILITY_DELAY)
|
|
30
|
+
: isForkPostElectra(fork)
|
|
31
|
+
? computeWeakSubjectivityPeriodFromConstituentsElectra(state.epochCtx.totalActiveBalanceIncrements, getBalanceChurnLimitFromCache(state.epochCtx), config.MIN_VALIDATOR_WITHDRAWABILITY_DELAY)
|
|
32
|
+
: computeWeakSubjectivityPeriodFromConstituentsPhase0(activeValidatorCount, state.epochCtx.totalActiveBalanceIncrements, getChurnLimit(config, activeValidatorCount), config.MIN_VALIDATOR_WITHDRAWABILITY_DELAY);
|
|
31
33
|
}
|
|
32
34
|
/**
|
|
33
35
|
* Same to computeWeakSubjectivityPeriodCachedState but for normal state
|
|
@@ -44,9 +46,12 @@ export function computeWeakSubjectivityPeriod(config, state) {
|
|
|
44
46
|
if (totalActiveBalanceIncrements <= 1) {
|
|
45
47
|
totalActiveBalanceIncrements = 1;
|
|
46
48
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
49
|
+
const churnLimitsGloas = getGloasChurnLimits(config, totalActiveBalanceIncrements);
|
|
50
|
+
return isForkPostGloas(fork)
|
|
51
|
+
? computeWeakSubjectivityPeriodFromConstituentsGloas(totalActiveBalanceIncrements, churnLimitsGloas.exit, churnLimitsGloas.activation, churnLimitsGloas.consolidation, config.MIN_VALIDATOR_WITHDRAWABILITY_DELAY)
|
|
52
|
+
: isForkPostElectra(fork)
|
|
53
|
+
? computeWeakSubjectivityPeriodFromConstituentsElectra(totalActiveBalanceIncrements, getBalanceChurnLimit(totalActiveBalanceIncrements, config.CHURN_LIMIT_QUOTIENT, config.MIN_PER_EPOCH_CHURN_LIMIT_ELECTRA), config.MIN_VALIDATOR_WITHDRAWABILITY_DELAY)
|
|
54
|
+
: computeWeakSubjectivityPeriodFromConstituentsPhase0(activeIndices.length, totalActiveBalanceIncrements, getChurnLimit(config, activeIndices.length), config.MIN_VALIDATOR_WITHDRAWABILITY_DELAY);
|
|
50
55
|
}
|
|
51
56
|
export function computeWeakSubjectivityPeriodFromConstituentsPhase0(activeValidatorCount, totalBalanceByIncrement, churnLimit, minWithdrawabilityDelay) {
|
|
52
57
|
const N = activeValidatorCount;
|
|
@@ -79,6 +84,13 @@ balanceChurnLimit, minWithdrawabilityDelay) {
|
|
|
79
84
|
const epochsForValidatorSetChurn = Math.floor(((SAFETY_DECAY * t) / (2 * delta * 100)) * EFFECTIVE_BALANCE_INCREMENT);
|
|
80
85
|
return minWithdrawabilityDelay + epochsForValidatorSetChurn;
|
|
81
86
|
}
|
|
87
|
+
export function computeWeakSubjectivityPeriodFromConstituentsGloas(totalBalanceByIncrement, exitChurnLimit, activationChurnLimit, consolidationChurnLimit, minWithdrawabilityDelay) {
|
|
88
|
+
// Keep t as increment for now. Multiply final result by EFFECTIVE_BALANCE_INCREMENT
|
|
89
|
+
const t = totalBalanceByIncrement;
|
|
90
|
+
const delta = Math.floor((2 * exitChurnLimit) / 3) + Math.floor(activationChurnLimit / 3) + consolidationChurnLimit;
|
|
91
|
+
const epochsForValidatorSetChurn = Math.floor(((SAFETY_DECAY * t) / (2 * delta * 100)) * EFFECTIVE_BALANCE_INCREMENT);
|
|
92
|
+
return minWithdrawabilityDelay + epochsForValidatorSetChurn;
|
|
93
|
+
}
|
|
82
94
|
export function getLatestBlockRoot(state) {
|
|
83
95
|
const header = ssz.phase0.BeaconBlockHeader.clone(state.latestBlockHeader);
|
|
84
96
|
if (ssz.Root.equals(header.stateRoot, ZERO_HASH)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"weakSubjectivity.js","sourceRoot":"","sources":["../../src/util/weakSubjectivity.ts"],"names":[],"mappings":"AACA,OAAO,EACL,2BAA2B,EAC3B,YAAY,EACZ,qBAAqB,EACrB,eAAe,EACf,iBAAiB,
|
|
1
|
+
{"version":3,"file":"weakSubjectivity.js","sourceRoot":"","sources":["../../src/util/weakSubjectivity.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"bugs": {
|
|
12
12
|
"url": "https://github.com/ChainSafe/lodestar/issues"
|
|
13
13
|
},
|
|
14
|
-
"version": "1.46.0-dev.
|
|
14
|
+
"version": "1.46.0-dev.e6f04acd82",
|
|
15
15
|
"type": "module",
|
|
16
16
|
"exports": {
|
|
17
17
|
".": {
|
|
@@ -52,11 +52,11 @@
|
|
|
52
52
|
],
|
|
53
53
|
"scripts": {
|
|
54
54
|
"clean": "rm -rf lib && rm -f *.tsbuildinfo",
|
|
55
|
-
"build": "
|
|
55
|
+
"build": "tsc -p tsconfig.build.json",
|
|
56
56
|
"build:watch": "pnpm run build --watch",
|
|
57
57
|
"build:release": "pnpm clean && pnpm build",
|
|
58
58
|
"check-build": "node -e \"(async function() { await import('./lib/index.js') })()\"",
|
|
59
|
-
"check-types": "
|
|
59
|
+
"check-types": "tsc",
|
|
60
60
|
"lint": "biome check src/ test/",
|
|
61
61
|
"lint:fix": "pnpm run lint --write",
|
|
62
62
|
"test": "pnpm test:unit",
|
|
@@ -71,14 +71,14 @@
|
|
|
71
71
|
"@chainsafe/pubkey-index-map": "^3.0.0",
|
|
72
72
|
"@chainsafe/ssz": "^1.6.2",
|
|
73
73
|
"@chainsafe/swap-or-not-shuffle": "^1.2.1",
|
|
74
|
-
"@lodestar/config": "^1.46.0-dev.
|
|
75
|
-
"@lodestar/params": "^1.46.0-dev.
|
|
76
|
-
"@lodestar/types": "^1.46.0-dev.
|
|
77
|
-
"@lodestar/utils": "^1.46.0-dev.
|
|
74
|
+
"@lodestar/config": "^1.46.0-dev.e6f04acd82",
|
|
75
|
+
"@lodestar/params": "^1.46.0-dev.e6f04acd82",
|
|
76
|
+
"@lodestar/types": "^1.46.0-dev.e6f04acd82",
|
|
77
|
+
"@lodestar/utils": "^1.46.0-dev.e6f04acd82",
|
|
78
78
|
"@vekexasia/bigint-buffer2": "^1.1.1"
|
|
79
79
|
},
|
|
80
80
|
"devDependencies": {
|
|
81
|
-
"@lodestar/api": "^1.46.0-dev.
|
|
81
|
+
"@lodestar/api": "^1.46.0-dev.e6f04acd82"
|
|
82
82
|
},
|
|
83
83
|
"keywords": [
|
|
84
84
|
"ethereum",
|
|
@@ -86,5 +86,5 @@
|
|
|
86
86
|
"beacon",
|
|
87
87
|
"blockchain"
|
|
88
88
|
],
|
|
89
|
-
"gitHead": "
|
|
89
|
+
"gitHead": "402a1913262b99cdeb71922eb306786e1a590e5e"
|
|
90
90
|
}
|
package/src/block/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {ForkPostGloas, ForkSeq} from "@lodestar/params";
|
|
2
|
-
import {BeaconBlock, BlindedBeaconBlock, altair, capella} from "@lodestar/types";
|
|
2
|
+
import {BeaconBlock, BlindedBeaconBlock, Slot, altair, capella} from "@lodestar/types";
|
|
3
3
|
import {BeaconStateTransitionMetrics} from "../metrics.js";
|
|
4
4
|
import {
|
|
5
5
|
CachedBeaconStateAllForks,
|
|
@@ -86,8 +86,9 @@ export function processBlock(
|
|
|
86
86
|
processExecutionPayload(fork, state as CachedBeaconStateBellatrix, block.body, externalData);
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
+
let parentSlot: Slot | null = null;
|
|
89
90
|
if (fork >= ForkSeq.gloas) {
|
|
90
|
-
processExecutionPayloadBid(
|
|
91
|
+
parentSlot = processExecutionPayloadBid(
|
|
91
92
|
state as CachedBeaconStateGloas,
|
|
92
93
|
(block as BeaconBlock<ForkPostGloas>).body.signedExecutionPayloadBid
|
|
93
94
|
);
|
|
@@ -95,7 +96,7 @@ export function processBlock(
|
|
|
95
96
|
|
|
96
97
|
processRandao(state, block, verifySignatures);
|
|
97
98
|
processEth1Data(state, block.body.eth1Data);
|
|
98
|
-
processOperations(fork, state, block.body, opts, metrics);
|
|
99
|
+
processOperations(fork, state, block.body, parentSlot, opts, metrics);
|
|
99
100
|
if (fork >= ForkSeq.altair) {
|
|
100
101
|
processSyncAggregate(state, block as altair.BeaconBlock, verifySignatures);
|
|
101
102
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {ForkSeq} from "@lodestar/params";
|
|
2
|
-
import {Attestation} from "@lodestar/types";
|
|
2
|
+
import {Attestation, Slot} from "@lodestar/types";
|
|
3
3
|
import {BeaconStateTransitionMetrics} from "../metrics.js";
|
|
4
4
|
import {CachedBeaconStateAllForks, CachedBeaconStateAltair, CachedBeaconStatePhase0} from "../types.js";
|
|
5
5
|
import {processAttestationPhase0} from "./processAttestationPhase0.js";
|
|
@@ -12,6 +12,7 @@ export function processAttestations(
|
|
|
12
12
|
fork: ForkSeq,
|
|
13
13
|
state: CachedBeaconStateAllForks,
|
|
14
14
|
attestations: Attestation[],
|
|
15
|
+
parentSlot: Slot | null,
|
|
15
16
|
verifySignatures = true,
|
|
16
17
|
metrics?: BeaconStateTransitionMetrics | null
|
|
17
18
|
): void {
|
|
@@ -20,6 +21,13 @@ export function processAttestations(
|
|
|
20
21
|
processAttestationPhase0(state as CachedBeaconStatePhase0, attestation, verifySignatures);
|
|
21
22
|
}
|
|
22
23
|
} else {
|
|
23
|
-
processAttestationsAltair(
|
|
24
|
+
processAttestationsAltair(
|
|
25
|
+
fork,
|
|
26
|
+
state as CachedBeaconStateAltair,
|
|
27
|
+
attestations,
|
|
28
|
+
parentSlot,
|
|
29
|
+
verifySignatures,
|
|
30
|
+
metrics
|
|
31
|
+
);
|
|
24
32
|
}
|
|
25
33
|
}
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
TIMELY_TARGET_WEIGHT,
|
|
15
15
|
WEIGHT_DENOMINATOR,
|
|
16
16
|
} from "@lodestar/params";
|
|
17
|
-
import {Attestation, Epoch, phase0} from "@lodestar/types";
|
|
17
|
+
import {Attestation, Epoch, Slot, phase0} from "@lodestar/types";
|
|
18
18
|
import {byteArrayEquals, intSqrt} from "@lodestar/utils";
|
|
19
19
|
import {BeaconStateTransitionMetrics} from "../metrics.js";
|
|
20
20
|
import {getAttestationWithIndicesSignatureSet} from "../signatureSets/indexedAttestation.js";
|
|
@@ -37,6 +37,7 @@ export function processAttestationsAltair(
|
|
|
37
37
|
fork: ForkSeq,
|
|
38
38
|
state: CachedBeaconStateAltair | CachedBeaconStateGloas,
|
|
39
39
|
attestations: Attestation[],
|
|
40
|
+
parentSlot: Slot | null,
|
|
40
41
|
verifySignature = true,
|
|
41
42
|
metrics?: BeaconStateTransitionMetrics | null
|
|
42
43
|
): void {
|
|
@@ -82,7 +83,8 @@ export function processAttestationsAltair(
|
|
|
82
83
|
stateSlot - data.slot,
|
|
83
84
|
epochCtx.epoch,
|
|
84
85
|
rootCache,
|
|
85
|
-
fork >= ForkSeq.gloas ? (state as CachedBeaconStateGloas).executionPayloadAvailability : null
|
|
86
|
+
fork >= ForkSeq.gloas ? (state as CachedBeaconStateGloas).executionPayloadAvailability : null,
|
|
87
|
+
parentSlot
|
|
86
88
|
);
|
|
87
89
|
|
|
88
90
|
// For each participant, update their participation
|
|
@@ -179,7 +181,8 @@ export function getAttestationParticipationStatus(
|
|
|
179
181
|
inclusionDelay: number,
|
|
180
182
|
currentEpoch: Epoch,
|
|
181
183
|
rootCache: RootCache,
|
|
182
|
-
executionPayloadAvailability: BitArray | null
|
|
184
|
+
executionPayloadAvailability: BitArray | null,
|
|
185
|
+
parentSlot: Slot | null
|
|
183
186
|
): {flags: number; isSameSlotAttestation: boolean} {
|
|
184
187
|
const justifiedCheckpoint =
|
|
185
188
|
data.target.epoch === currentEpoch ? rootCache.currentJustifiedCheckpoint : rootCache.previousJustifiedCheckpoint;
|
|
@@ -221,13 +224,16 @@ export function getAttestationParticipationStatus(
|
|
|
221
224
|
if (executionPayloadAvailability === null) {
|
|
222
225
|
throw new Error("Must supply executionPayloadAvailability post-gloas");
|
|
223
226
|
}
|
|
227
|
+
if (parentSlot === null) {
|
|
228
|
+
throw new Error("Must supply parentSlot post-gloas");
|
|
229
|
+
}
|
|
224
230
|
|
|
225
231
|
if (data.index !== 0 && data.index !== 1) {
|
|
226
232
|
throw new Error(`data index must be 0 or 1 index=${data.index}`);
|
|
227
233
|
}
|
|
228
234
|
|
|
229
235
|
isMatchingPayload =
|
|
230
|
-
Boolean(data.index) === executionPayloadAvailability.get(
|
|
236
|
+
Boolean(data.index) === executionPayloadAvailability.get(parentSlot % SLOTS_PER_HISTORICAL_ROOT);
|
|
231
237
|
}
|
|
232
238
|
|
|
233
239
|
isMatchingHead = isMatchingHead && isMatchingPayload;
|
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
import {PublicKey, Signature, verify} from "@chainsafe/blst";
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import {
|
|
3
|
+
BUILDER_INDEX_SELF_BUILD,
|
|
4
|
+
ForkSeq,
|
|
5
|
+
GENESIS_SLOT,
|
|
6
|
+
PAYLOAD_BUILDER_VERSION,
|
|
7
|
+
SLOTS_PER_EPOCH,
|
|
8
|
+
} from "@lodestar/params";
|
|
9
|
+
import {Slot, gloas, heze, ssz} from "@lodestar/types";
|
|
4
10
|
import {byteArrayEquals, toHex, toRootHex} from "@lodestar/utils";
|
|
5
11
|
import {G2_POINT_AT_INFINITY} from "../constants/constants.js";
|
|
6
12
|
import {getExecutionPayloadBidSigningRoot} from "../signatureSets/executionPayloadBid.js";
|
|
7
|
-
import {CachedBeaconStateGloas} from "../types.js";
|
|
13
|
+
import {CachedBeaconStateGloas, CachedBeaconStateHeze} from "../types.js";
|
|
8
14
|
import {canBuilderCoverBid, isActiveBuilder} from "../util/gloas.js";
|
|
9
15
|
import {getBlockRootAtSlot, getCurrentEpoch, getRandaoMix} from "../util/index.js";
|
|
10
16
|
|
|
11
17
|
export function processExecutionPayloadBid(
|
|
12
|
-
state: CachedBeaconStateGloas,
|
|
18
|
+
state: CachedBeaconStateGloas | CachedBeaconStateHeze,
|
|
13
19
|
signedBid: gloas.SignedExecutionPayloadBid
|
|
14
|
-
):
|
|
20
|
+
): Slot {
|
|
15
21
|
const bid = signedBid.message;
|
|
16
22
|
const {builderIndex, value: amount} = bid;
|
|
17
23
|
|
|
@@ -41,7 +47,7 @@ export function processExecutionPayloadBid(
|
|
|
41
47
|
}
|
|
42
48
|
|
|
43
49
|
// Verify that the builder has funds to cover the bid
|
|
44
|
-
if (!canBuilderCoverBid(state, builderIndex, amount)) {
|
|
50
|
+
if (!canBuilderCoverBid(state as CachedBeaconStateGloas, builderIndex, amount)) {
|
|
45
51
|
throw Error(`Invalid execution payload bid: builder ${builderIndex} has insufficient balance`);
|
|
46
52
|
}
|
|
47
53
|
|
|
@@ -99,15 +105,22 @@ export function processExecutionPayloadBid(
|
|
|
99
105
|
state.builderPendingPayments.set(SLOTS_PER_EPOCH + (bid.slot % SLOTS_PER_EPOCH), pendingPaymentView);
|
|
100
106
|
}
|
|
101
107
|
|
|
102
|
-
|
|
108
|
+
const parentSlot = state.latestExecutionPayloadBid.slot;
|
|
109
|
+
if (state.config.getForkSeq(state.slot) >= ForkSeq.heze) {
|
|
110
|
+
state.latestExecutionPayloadBid = ssz.heze.ExecutionPayloadBid.toViewDU(bid as heze.ExecutionPayloadBid);
|
|
111
|
+
} else {
|
|
112
|
+
state.latestExecutionPayloadBid = ssz.gloas.ExecutionPayloadBid.toViewDU(bid);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return parentSlot;
|
|
103
116
|
}
|
|
104
117
|
|
|
105
118
|
function verifyExecutionPayloadBidSignature(
|
|
106
|
-
state: CachedBeaconStateGloas,
|
|
119
|
+
state: CachedBeaconStateGloas | CachedBeaconStateHeze,
|
|
107
120
|
pubkey: Uint8Array,
|
|
108
121
|
signedBid: gloas.SignedExecutionPayloadBid
|
|
109
122
|
): boolean {
|
|
110
|
-
const signingRoot = getExecutionPayloadBidSigningRoot(state.config,
|
|
123
|
+
const signingRoot = getExecutionPayloadBidSigningRoot(state.config, signedBid.message);
|
|
111
124
|
|
|
112
125
|
try {
|
|
113
126
|
const publicKey = PublicKey.fromBytes(pubkey);
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
MAX_PROPOSER_SLASHINGS,
|
|
8
8
|
MAX_VOLUNTARY_EXITS,
|
|
9
9
|
} from "@lodestar/params";
|
|
10
|
-
import {BeaconBlockBody, capella, electra, gloas} from "@lodestar/types";
|
|
10
|
+
import {BeaconBlockBody, Slot, capella, electra, gloas} from "@lodestar/types";
|
|
11
11
|
import {BeaconStateTransitionMetrics} from "../metrics.js";
|
|
12
12
|
import {
|
|
13
13
|
CachedBeaconStateAllForks,
|
|
@@ -44,6 +44,7 @@ export function processOperations(
|
|
|
44
44
|
fork: ForkSeq,
|
|
45
45
|
state: CachedBeaconStateAllForks,
|
|
46
46
|
body: BeaconBlockBody,
|
|
47
|
+
parentSlot: Slot | null,
|
|
47
48
|
opts: ProcessBlockOpts = {verifySignatures: true},
|
|
48
49
|
metrics?: BeaconStateTransitionMetrics | null
|
|
49
50
|
): void {
|
|
@@ -67,7 +68,7 @@ export function processOperations(
|
|
|
67
68
|
processAttesterSlashing(fork, state, attesterSlashing, opts.verifySignatures);
|
|
68
69
|
}
|
|
69
70
|
|
|
70
|
-
processAttestations(fork, state, body.attestations, opts.verifySignatures, metrics);
|
|
71
|
+
processAttestations(fork, state, body.attestations, parentSlot, opts.verifySignatures, metrics);
|
|
71
72
|
|
|
72
73
|
for (const deposit of body.deposits) {
|
|
73
74
|
processDeposit(fork, state, deposit);
|
|
@@ -8,7 +8,11 @@ import {
|
|
|
8
8
|
import {electra, phase0, ssz} from "@lodestar/types";
|
|
9
9
|
import {toHex} from "@lodestar/utils";
|
|
10
10
|
import {CachedBeaconStateElectra, CachedBeaconStateGloas} from "../types.js";
|
|
11
|
-
import {
|
|
11
|
+
import {
|
|
12
|
+
hasCompoundingWithdrawalCredential,
|
|
13
|
+
hasExecutionWithdrawalCredential,
|
|
14
|
+
isValidatorKnown,
|
|
15
|
+
} from "../util/electra.js";
|
|
12
16
|
import {computeExitEpochAndUpdateChurn} from "../util/epoch.js";
|
|
13
17
|
import {getPendingBalanceToWithdraw, isActiveValidator} from "../util/validator.js";
|
|
14
18
|
import {initiateValidatorExit} from "./initiateValidatorExit.js";
|
|
@@ -32,7 +36,7 @@ export function processWithdrawalRequest(
|
|
|
32
36
|
// bail out if validator is not in beacon state
|
|
33
37
|
// note that we don't need to check for 6110 unfinalized vals as they won't be eligible for withdraw/exit anyway
|
|
34
38
|
const validatorIndex = pubkeyCache.getIndex(withdrawalRequest.validatorPubkey);
|
|
35
|
-
if (validatorIndex
|
|
39
|
+
if (!isValidatorKnown(state, validatorIndex)) {
|
|
36
40
|
return;
|
|
37
41
|
}
|
|
38
42
|
|
package/src/cache/stateCache.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {BeaconConfig} from "@lodestar/config";
|
|
2
2
|
import {loadState} from "../util/loadState/loadState.js";
|
|
3
|
+
import {isViewDUNodesPopulated} from "../util/ssz.js";
|
|
3
4
|
import {EpochCache, EpochCacheImmutableData, EpochCacheOpts} from "./epochCache.js";
|
|
4
5
|
import {RewardCache, createEmptyRewardCache} from "./rewardCache.js";
|
|
5
6
|
import {
|
|
@@ -12,6 +13,7 @@ import {
|
|
|
12
13
|
BeaconStateExecutions,
|
|
13
14
|
BeaconStateFulu,
|
|
14
15
|
BeaconStateGloas,
|
|
16
|
+
BeaconStateHeze,
|
|
15
17
|
BeaconStatePhase0,
|
|
16
18
|
} from "./types.js";
|
|
17
19
|
|
|
@@ -136,6 +138,7 @@ export type CachedBeaconStateDeneb = CachedBeaconState<BeaconStateDeneb>;
|
|
|
136
138
|
export type CachedBeaconStateElectra = CachedBeaconState<BeaconStateElectra>;
|
|
137
139
|
export type CachedBeaconStateFulu = CachedBeaconState<BeaconStateFulu>;
|
|
138
140
|
export type CachedBeaconStateGloas = CachedBeaconState<BeaconStateGloas>;
|
|
141
|
+
export type CachedBeaconStateHeze = CachedBeaconState<BeaconStateHeze>;
|
|
139
142
|
|
|
140
143
|
export type CachedBeaconStateAllForks = CachedBeaconState<BeaconStateAllForks>;
|
|
141
144
|
export type CachedBeaconStateExecutions = CachedBeaconState<BeaconStateExecutions>;
|
|
@@ -254,9 +257,9 @@ export function isCachedBeaconState<T extends BeaconStateAllForks>(
|
|
|
254
257
|
// This cache is populated during epoch transition, and should be preserved for performance.
|
|
255
258
|
// If the cache is missing too often, means that our clone strategy is not working well.
|
|
256
259
|
export function isStateValidatorsNodesPopulated(state: CachedBeaconStateAllForks): boolean {
|
|
257
|
-
return (state.validators
|
|
260
|
+
return isViewDUNodesPopulated(state.validators);
|
|
258
261
|
}
|
|
259
262
|
|
|
260
263
|
export function isStateBalancesNodesPopulated(state: CachedBeaconStateAllForks): boolean {
|
|
261
|
-
return (state.balances
|
|
264
|
+
return isViewDUNodesPopulated(state.balances);
|
|
262
265
|
}
|
package/src/cache/types.ts
CHANGED
|
@@ -11,6 +11,7 @@ export type BeaconStateDeneb = CompositeViewDU<SSZTypesFor<ForkName.deneb, "Beac
|
|
|
11
11
|
export type BeaconStateElectra = CompositeViewDU<SSZTypesFor<ForkName.electra, "BeaconState">>;
|
|
12
12
|
export type BeaconStateFulu = CompositeViewDU<SSZTypesFor<ForkName.fulu, "BeaconState">>;
|
|
13
13
|
export type BeaconStateGloas = CompositeViewDU<SSZTypesFor<ForkName.gloas, "BeaconState">>;
|
|
14
|
+
export type BeaconStateHeze = CompositeViewDU<SSZTypesFor<ForkName.heze, "BeaconState">>;
|
|
14
15
|
|
|
15
16
|
export type BeaconStateAllForks = CompositeViewDU<SSZTypesFor<ForkAll, "BeaconState">>;
|
|
16
17
|
export type BeaconStateExecutions = CompositeViewDU<SSZTypesFor<ForkPostBellatrix & ForkPreGloas, "BeaconState">>;
|
package/src/index.ts
CHANGED
|
@@ -52,6 +52,7 @@ export {
|
|
|
52
52
|
type IBeaconStateViewElectra,
|
|
53
53
|
type IBeaconStateViewFulu,
|
|
54
54
|
type IBeaconStateViewGloas,
|
|
55
|
+
type IBeaconStateViewHeze,
|
|
55
56
|
isStatePostAltair,
|
|
56
57
|
isStatePostBellatrix,
|
|
57
58
|
isStatePostCapella,
|
|
@@ -59,6 +60,7 @@ export {
|
|
|
59
60
|
isStatePostElectra,
|
|
60
61
|
isStatePostFulu,
|
|
61
62
|
isStatePostGloas,
|
|
63
|
+
isStatePostHeze,
|
|
62
64
|
} from "./stateView/interface.js";
|
|
63
65
|
export {createBeaconStateView, createBeaconStateViewForHistoricalRegen} from "./stateView/stateViewFactory.js";
|
|
64
66
|
export type {
|
|
@@ -71,6 +73,7 @@ export type {
|
|
|
71
73
|
BeaconStateExecutions,
|
|
72
74
|
BeaconStateFulu,
|
|
73
75
|
BeaconStateGloas,
|
|
76
|
+
BeaconStateHeze,
|
|
74
77
|
// Non-cached states
|
|
75
78
|
BeaconStatePhase0,
|
|
76
79
|
CachedBeaconStateAllForks,
|
|
@@ -82,6 +85,7 @@ export type {
|
|
|
82
85
|
CachedBeaconStateExecutions,
|
|
83
86
|
CachedBeaconStateFulu,
|
|
84
87
|
CachedBeaconStateGloas,
|
|
88
|
+
CachedBeaconStateHeze,
|
|
85
89
|
CachedBeaconStatePhase0,
|
|
86
90
|
} from "./types.js";
|
|
87
91
|
export * from "./util/index.js";
|
|
@@ -193,11 +193,11 @@ export function nextSyncCommitteeGindexAtFork(fork: ForkName): number {
|
|
|
193
193
|
return NEXT_SYNC_COMMITTEE_GINDEX;
|
|
194
194
|
}
|
|
195
195
|
|
|
196
|
-
|
|
196
|
+
function getGindexDepth(gindex: number): number {
|
|
197
197
|
return Math.floor(Math.log2(gindex));
|
|
198
198
|
}
|
|
199
199
|
|
|
200
|
-
|
|
200
|
+
function getGindexIndex(gindex: number): number {
|
|
201
201
|
return gindex - 2 ** getGindexDepth(gindex);
|
|
202
202
|
}
|
|
203
203
|
|
|
@@ -263,6 +263,7 @@ export function upgradeLightClientHeader(
|
|
|
263
263
|
// Break if no further upgrades is required else fall through
|
|
264
264
|
if (ForkSeq[targetFork] <= ForkSeq.fulu) break;
|
|
265
265
|
|
|
266
|
+
// biome-ignore lint/suspicious/noFallthroughSwitchClause: We need fall-through behavior here
|
|
266
267
|
case ForkName.gloas:
|
|
267
268
|
if (isGloasLightClientHeader(upgradedHeader)) {
|
|
268
269
|
break;
|
|
@@ -272,6 +273,12 @@ export function upgradeLightClientHeader(
|
|
|
272
273
|
|
|
273
274
|
// Break if no further upgrades is required else fall through
|
|
274
275
|
if (ForkSeq[targetFork] <= ForkSeq.gloas) break;
|
|
276
|
+
|
|
277
|
+
case ForkName.heze:
|
|
278
|
+
// No changes to LightClientHeader in Heze
|
|
279
|
+
|
|
280
|
+
// Break if no further upgrades is required else fall through
|
|
281
|
+
if (ForkSeq[targetFork] <= ForkSeq.heze) break;
|
|
275
282
|
}
|
|
276
283
|
return upgradedHeader;
|
|
277
284
|
}
|
package/src/metrics.ts
CHANGED
|
@@ -3,6 +3,7 @@ import {ProposerRewardType} from "./block/types.js";
|
|
|
3
3
|
import {EpochTransitionStep} from "./epoch/index.js";
|
|
4
4
|
import {StateCloneSource, StateHashTreeRootSource} from "./stateTransition.js";
|
|
5
5
|
import {CachedBeaconStateAllForks} from "./types.js";
|
|
6
|
+
import {isViewDUNodesPopulated} from "./util/ssz.js";
|
|
6
7
|
|
|
7
8
|
export type BeaconStateTransitionMetrics = ReturnType<typeof getMetrics>;
|
|
8
9
|
|
|
@@ -159,9 +160,9 @@ export function onPostStateMetrics(postState: CachedBeaconStateAllForks, metrics
|
|
|
159
160
|
// This cache is populated during epoch transition, and should be preserved for performance.
|
|
160
161
|
// If the cache is missing too often, means that our clone strategy is not working well.
|
|
161
162
|
function isValidatorsNodesPopulated(state: CachedBeaconStateAllForks): boolean {
|
|
162
|
-
return (state.validators
|
|
163
|
+
return isViewDUNodesPopulated(state.validators);
|
|
163
164
|
}
|
|
164
165
|
|
|
165
166
|
function isBalancesNodesPopulated(state: CachedBeaconStateAllForks): boolean {
|
|
166
|
-
return (state.balances
|
|
167
|
+
return isViewDUNodesPopulated(state.balances);
|
|
167
168
|
}
|
|
@@ -4,11 +4,17 @@ import {
|
|
|
4
4
|
WHISTLEBLOWER_REWARD_QUOTIENT,
|
|
5
5
|
WHISTLEBLOWER_REWARD_QUOTIENT_ELECTRA,
|
|
6
6
|
isForkPostElectra,
|
|
7
|
+
isForkPostGloas,
|
|
7
8
|
} from "@lodestar/params";
|
|
8
|
-
import {BeaconBlock, altair, phase0, rewards} from "@lodestar/types";
|
|
9
|
+
import {BeaconBlock, Slot, altair, phase0, rewards} from "@lodestar/types";
|
|
9
10
|
import {processAttestationsAltair} from "../block/processAttestationsAltair.js";
|
|
10
11
|
import {RewardCache} from "../cache/rewardCache.js";
|
|
11
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
CachedBeaconStateAllForks,
|
|
14
|
+
CachedBeaconStateAltair,
|
|
15
|
+
CachedBeaconStateGloas,
|
|
16
|
+
CachedBeaconStatePhase0,
|
|
17
|
+
} from "../cache/stateCache.js";
|
|
12
18
|
import {getAttesterSlashableIndices} from "../util/attestation.js";
|
|
13
19
|
|
|
14
20
|
type SubRewardValue = number; // All reward values should be integer
|
|
@@ -36,10 +42,18 @@ export async function computeBlockRewards(
|
|
|
36
42
|
let syncAggregateReward = cachedSyncAggregateReward;
|
|
37
43
|
|
|
38
44
|
if (blockAttestationReward === 0) {
|
|
45
|
+
const parentSlot = isForkPostGloas(fork)
|
|
46
|
+
? (preState as CachedBeaconStateGloas).latestExecutionPayloadBid.slot
|
|
47
|
+
: null;
|
|
39
48
|
blockAttestationReward =
|
|
40
49
|
fork === ForkName.phase0
|
|
41
50
|
? computeBlockAttestationRewardPhase0(block as phase0.BeaconBlock, preState as CachedBeaconStatePhase0)
|
|
42
|
-
: computeBlockAttestationRewardAltair(
|
|
51
|
+
: computeBlockAttestationRewardAltair(
|
|
52
|
+
config,
|
|
53
|
+
block as altair.BeaconBlock,
|
|
54
|
+
preState as CachedBeaconStateAltair,
|
|
55
|
+
parentSlot
|
|
56
|
+
);
|
|
43
57
|
}
|
|
44
58
|
|
|
45
59
|
if (syncAggregateReward === 0) {
|
|
@@ -79,12 +93,13 @@ function computeBlockAttestationRewardPhase0(
|
|
|
79
93
|
function computeBlockAttestationRewardAltair(
|
|
80
94
|
config: BeaconConfig,
|
|
81
95
|
block: altair.BeaconBlock,
|
|
82
|
-
preState: CachedBeaconStateAltair
|
|
96
|
+
preState: CachedBeaconStateAltair,
|
|
97
|
+
parentSlot: Slot | null
|
|
83
98
|
): SubRewardValue {
|
|
84
99
|
const fork = config.getForkSeq(block.slot);
|
|
85
100
|
const {attestations} = block.body;
|
|
86
101
|
|
|
87
|
-
processAttestationsAltair(fork, preState, attestations, false);
|
|
102
|
+
processAttestationsAltair(fork, preState, attestations, parentSlot, false);
|
|
88
103
|
|
|
89
104
|
return preState.proposerRewards.attestations;
|
|
90
105
|
}
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import {BeaconConfig} from "@lodestar/config";
|
|
2
|
-
import {DOMAIN_BEACON_BUILDER} from "@lodestar/params";
|
|
3
|
-
import {
|
|
2
|
+
import {DOMAIN_BEACON_BUILDER, isForkPostGloas} from "@lodestar/params";
|
|
3
|
+
import {ExecutionPayloadBid, ssz, sszTypesFor} from "@lodestar/types";
|
|
4
4
|
import {computeSigningRoot} from "../util/index.js";
|
|
5
5
|
|
|
6
|
-
export function getExecutionPayloadBidSigningRoot(
|
|
7
|
-
config
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
): Uint8Array {
|
|
11
|
-
const domain = config.getDomain(stateSlot, DOMAIN_BEACON_BUILDER);
|
|
6
|
+
export function getExecutionPayloadBidSigningRoot(config: BeaconConfig, bid: ExecutionPayloadBid): Uint8Array {
|
|
7
|
+
const fork = config.getForkName(bid.slot);
|
|
8
|
+
const domain = config.getDomain(bid.slot, DOMAIN_BEACON_BUILDER);
|
|
9
|
+
const sszType = isForkPostGloas(fork) ? sszTypesFor(fork).ExecutionPayloadBid : ssz.gloas.ExecutionPayloadBid;
|
|
12
10
|
|
|
13
|
-
return computeSigningRoot(
|
|
11
|
+
return computeSigningRoot(sszType, bid, domain);
|
|
14
12
|
}
|
package/src/slot/index.ts
CHANGED
|
@@ -10,6 +10,7 @@ export {upgradeStateToDeneb} from "./upgradeStateToDeneb.js";
|
|
|
10
10
|
export {upgradeStateToElectra} from "./upgradeStateToElectra.js";
|
|
11
11
|
export {upgradeStateToFulu} from "./upgradeStateToFulu.js";
|
|
12
12
|
export {upgradeStateToGloas} from "./upgradeStateToGloas.js";
|
|
13
|
+
export {upgradeStateToHeze} from "./upgradeStateToHeze.js";
|
|
13
14
|
|
|
14
15
|
/**
|
|
15
16
|
* Dial state to next slot. Common for all forks
|
|
@@ -70,7 +70,7 @@ export function upgradeStateToGloas(stateFulu: CachedBeaconStateFulu): CachedBea
|
|
|
70
70
|
stateGloasView.currentSyncCommittee = stateGloasCloned.currentSyncCommittee;
|
|
71
71
|
stateGloasView.nextSyncCommittee = stateGloasCloned.nextSyncCommittee;
|
|
72
72
|
stateGloasView.latestExecutionPayloadBid.blockHash = stateFulu.latestExecutionPayloadHeader.blockHash;
|
|
73
|
-
stateGloasView.latestExecutionPayloadBid.gasLimit = stateFulu.latestExecutionPayloadHeader.gasLimit;
|
|
73
|
+
stateGloasView.latestExecutionPayloadBid.gasLimit = BigInt(stateFulu.latestExecutionPayloadHeader.gasLimit);
|
|
74
74
|
stateGloasView.latestExecutionPayloadBid.executionRequestsRoot = ssz.gloas.ExecutionRequests.hashTreeRoot(
|
|
75
75
|
ssz.gloas.ExecutionRequests.defaultValue()
|
|
76
76
|
);
|