@lodestar/state-transition 1.46.0-dev.1cd9a671ea → 1.46.0-dev.1f20df4cbe
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.d.ts.map +1 -1
- package/lib/cache/epochCache.js +19 -21
- 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 +15 -15
- 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/epochCache.ts +19 -22
- 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
package/src/cache/epochCache.ts
CHANGED
|
@@ -408,12 +408,17 @@ export class EpochCache {
|
|
|
408
408
|
|
|
409
409
|
const nextShuffling = cachedNextShuffling ?? computeEpochShuffling(state, nextActiveIndices, nextEpoch);
|
|
410
410
|
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
let proposers: number[];
|
|
411
|
+
let proposers: ValidatorIndex[];
|
|
412
|
+
let proposersNextEpoch: ProposersDeferred;
|
|
414
413
|
if (currentEpoch >= config.FULU_FORK_EPOCH) {
|
|
415
|
-
//
|
|
416
|
-
|
|
414
|
+
// After fulu, use state.proposerLookahead for current and next epoch proposers.
|
|
415
|
+
// Computing from the unfiltered active shuffling would include slashed validators in gloas.
|
|
416
|
+
const proposerLookahead = (state as CachedBeaconStateFulu).proposerLookahead.getAll();
|
|
417
|
+
proposers = proposerLookahead.slice(0, SLOTS_PER_EPOCH);
|
|
418
|
+
proposersNextEpoch = {
|
|
419
|
+
computed: true,
|
|
420
|
+
indexes: proposerLookahead.slice(SLOTS_PER_EPOCH, SLOTS_PER_EPOCH * 2),
|
|
421
|
+
};
|
|
417
422
|
} else {
|
|
418
423
|
// We need to calculate Pre-fulu
|
|
419
424
|
// Allow to create CachedBeaconState for empty states, or no active validators
|
|
@@ -421,18 +426,17 @@ export class EpochCache {
|
|
|
421
426
|
currentShuffling.activeIndices.length > 0
|
|
422
427
|
? computeProposers(
|
|
423
428
|
config.getForkSeqAtEpoch(currentEpoch),
|
|
424
|
-
|
|
429
|
+
getSeed(state, currentEpoch, DOMAIN_BEACON_PROPOSER),
|
|
425
430
|
currentShuffling,
|
|
426
431
|
effectiveBalanceIncrements
|
|
427
432
|
)
|
|
428
433
|
: [];
|
|
434
|
+
proposersNextEpoch = {
|
|
435
|
+
computed: false,
|
|
436
|
+
seed: getSeed(state, nextEpoch, DOMAIN_BEACON_PROPOSER),
|
|
437
|
+
};
|
|
429
438
|
}
|
|
430
439
|
|
|
431
|
-
const proposersNextEpoch: ProposersDeferred = {
|
|
432
|
-
computed: false,
|
|
433
|
-
seed: getSeed(state, nextEpoch, DOMAIN_BEACON_PROPOSER),
|
|
434
|
-
};
|
|
435
|
-
|
|
436
440
|
// Only after altair, compute the indices of the current sync committee
|
|
437
441
|
const afterAltairFork = currentEpoch >= config.ALTAIR_FORK_EPOCH;
|
|
438
442
|
|
|
@@ -713,17 +717,10 @@ export class EpochCache {
|
|
|
713
717
|
// Populate proposer cache with lookahead from state
|
|
714
718
|
const proposerLookahead = (state as CachedBeaconStateFulu).proposerLookahead.getAll();
|
|
715
719
|
this.proposers = proposerLookahead.slice(0, SLOTS_PER_EPOCH);
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
indexes: proposerLookahead.slice(SLOTS_PER_EPOCH, SLOTS_PER_EPOCH * 2),
|
|
721
|
-
};
|
|
722
|
-
} else {
|
|
723
|
-
// This should not happen unless MIN_SEED_LOOKAHEAD is set to 0
|
|
724
|
-
// this ensures things don't break if the proposer lookahead is not long enough
|
|
725
|
-
this.proposersNextEpoch = {computed: false, seed: getSeed(state, epochAfterUpcoming, DOMAIN_BEACON_PROPOSER)};
|
|
726
|
-
}
|
|
720
|
+
this.proposersNextEpoch = {
|
|
721
|
+
computed: true,
|
|
722
|
+
indexes: proposerLookahead.slice(SLOTS_PER_EPOCH, SLOTS_PER_EPOCH * 2),
|
|
723
|
+
};
|
|
727
724
|
} else {
|
|
728
725
|
// Need to calculate proposers pre-fulu
|
|
729
726
|
const upcomingProposerSeed = getSeed(state, upcomingEpoch, DOMAIN_BEACON_PROPOSER);
|
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
|
);
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import {ssz} from "@lodestar/types";
|
|
2
|
+
import {getCachedBeaconState} from "../cache/stateCache.js";
|
|
3
|
+
import {CachedBeaconStateGloas, CachedBeaconStateHeze} from "../types.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Upgrade a state from Gloas to Heze.
|
|
7
|
+
* Spec: heze/fork.md `upgrade_to_heze`.
|
|
8
|
+
*/
|
|
9
|
+
export function upgradeStateToHeze(stateGloas: CachedBeaconStateGloas): CachedBeaconStateHeze {
|
|
10
|
+
const {config} = stateGloas;
|
|
11
|
+
|
|
12
|
+
ssz.gloas.BeaconState.commitViewDU(stateGloas);
|
|
13
|
+
const stateHezeCloned = stateGloas;
|
|
14
|
+
|
|
15
|
+
const stateHezeView = ssz.heze.BeaconState.defaultViewDU();
|
|
16
|
+
|
|
17
|
+
stateHezeView.genesisTime = stateHezeCloned.genesisTime;
|
|
18
|
+
stateHezeView.genesisValidatorsRoot = stateHezeCloned.genesisValidatorsRoot;
|
|
19
|
+
stateHezeView.slot = stateHezeCloned.slot;
|
|
20
|
+
stateHezeView.fork = ssz.phase0.Fork.toViewDU({
|
|
21
|
+
previousVersion: stateGloas.fork.currentVersion,
|
|
22
|
+
currentVersion: config.HEZE_FORK_VERSION,
|
|
23
|
+
epoch: stateGloas.epochCtx.epoch,
|
|
24
|
+
});
|
|
25
|
+
stateHezeView.latestBlockHeader = stateHezeCloned.latestBlockHeader;
|
|
26
|
+
stateHezeView.blockRoots = stateHezeCloned.blockRoots;
|
|
27
|
+
stateHezeView.stateRoots = stateHezeCloned.stateRoots;
|
|
28
|
+
stateHezeView.historicalRoots = stateHezeCloned.historicalRoots;
|
|
29
|
+
stateHezeView.eth1Data = stateHezeCloned.eth1Data;
|
|
30
|
+
stateHezeView.eth1DataVotes = stateHezeCloned.eth1DataVotes;
|
|
31
|
+
stateHezeView.eth1DepositIndex = stateHezeCloned.eth1DepositIndex;
|
|
32
|
+
stateHezeView.validators = stateHezeCloned.validators;
|
|
33
|
+
stateHezeView.balances = stateHezeCloned.balances;
|
|
34
|
+
stateHezeView.randaoMixes = stateHezeCloned.randaoMixes;
|
|
35
|
+
stateHezeView.slashings = stateHezeCloned.slashings;
|
|
36
|
+
stateHezeView.previousEpochParticipation = stateHezeCloned.previousEpochParticipation;
|
|
37
|
+
stateHezeView.currentEpochParticipation = stateHezeCloned.currentEpochParticipation;
|
|
38
|
+
stateHezeView.justificationBits = stateHezeCloned.justificationBits;
|
|
39
|
+
stateHezeView.previousJustifiedCheckpoint = stateHezeCloned.previousJustifiedCheckpoint;
|
|
40
|
+
stateHezeView.currentJustifiedCheckpoint = stateHezeCloned.currentJustifiedCheckpoint;
|
|
41
|
+
stateHezeView.finalizedCheckpoint = stateHezeCloned.finalizedCheckpoint;
|
|
42
|
+
stateHezeView.inactivityScores = stateHezeCloned.inactivityScores;
|
|
43
|
+
stateHezeView.currentSyncCommittee = stateHezeCloned.currentSyncCommittee;
|
|
44
|
+
stateHezeView.nextSyncCommittee = stateHezeCloned.nextSyncCommittee;
|
|
45
|
+
stateHezeView.latestBlockHash = stateHezeCloned.latestBlockHash;
|
|
46
|
+
stateHezeView.nextWithdrawalIndex = stateHezeCloned.nextWithdrawalIndex;
|
|
47
|
+
stateHezeView.nextWithdrawalValidatorIndex = stateHezeCloned.nextWithdrawalValidatorIndex;
|
|
48
|
+
stateHezeView.historicalSummaries = stateHezeCloned.historicalSummaries;
|
|
49
|
+
stateHezeView.depositRequestsStartIndex = stateHezeCloned.depositRequestsStartIndex;
|
|
50
|
+
stateHezeView.depositBalanceToConsume = stateHezeCloned.depositBalanceToConsume;
|
|
51
|
+
stateHezeView.exitBalanceToConsume = stateHezeCloned.exitBalanceToConsume;
|
|
52
|
+
stateHezeView.earliestExitEpoch = stateHezeCloned.earliestExitEpoch;
|
|
53
|
+
stateHezeView.consolidationBalanceToConsume = stateHezeCloned.consolidationBalanceToConsume;
|
|
54
|
+
stateHezeView.earliestConsolidationEpoch = stateHezeCloned.earliestConsolidationEpoch;
|
|
55
|
+
stateHezeView.pendingDeposits = stateHezeCloned.pendingDeposits;
|
|
56
|
+
stateHezeView.pendingPartialWithdrawals = stateHezeCloned.pendingPartialWithdrawals;
|
|
57
|
+
stateHezeView.pendingConsolidations = stateHezeCloned.pendingConsolidations;
|
|
58
|
+
stateHezeView.proposerLookahead = stateHezeCloned.proposerLookahead;
|
|
59
|
+
stateHezeView.builders = stateHezeCloned.builders;
|
|
60
|
+
stateHezeView.nextWithdrawalBuilderIndex = stateHezeCloned.nextWithdrawalBuilderIndex;
|
|
61
|
+
stateHezeView.executionPayloadAvailability = stateHezeCloned.executionPayloadAvailability;
|
|
62
|
+
stateHezeView.builderPendingPayments = stateHezeCloned.builderPendingPayments;
|
|
63
|
+
stateHezeView.builderPendingWithdrawals = stateHezeCloned.builderPendingWithdrawals;
|
|
64
|
+
|
|
65
|
+
// [Modified in Heze:EIP7805] inclusion_list_bits = Bitvector[INCLUSION_LIST_COMMITTEE_SIZE]() (default zero)
|
|
66
|
+
const oldBid = stateHezeCloned.latestExecutionPayloadBid;
|
|
67
|
+
const newBid = ssz.heze.ExecutionPayloadBid.defaultViewDU();
|
|
68
|
+
newBid.parentBlockHash = oldBid.parentBlockHash;
|
|
69
|
+
newBid.parentBlockRoot = oldBid.parentBlockRoot;
|
|
70
|
+
newBid.blockHash = oldBid.blockHash;
|
|
71
|
+
newBid.prevRandao = oldBid.prevRandao;
|
|
72
|
+
newBid.feeRecipient = oldBid.feeRecipient;
|
|
73
|
+
newBid.gasLimit = oldBid.gasLimit;
|
|
74
|
+
newBid.builderIndex = oldBid.builderIndex;
|
|
75
|
+
newBid.slot = oldBid.slot;
|
|
76
|
+
newBid.value = oldBid.value;
|
|
77
|
+
newBid.executionPayment = oldBid.executionPayment;
|
|
78
|
+
newBid.blobKzgCommitments = oldBid.blobKzgCommitments;
|
|
79
|
+
newBid.executionRequestsRoot = oldBid.executionRequestsRoot;
|
|
80
|
+
stateHezeView.latestExecutionPayloadBid = newBid;
|
|
81
|
+
|
|
82
|
+
stateHezeView.payloadExpectedWithdrawals = stateHezeCloned.payloadExpectedWithdrawals;
|
|
83
|
+
stateHezeView.ptcWindow = stateHezeCloned.ptcWindow;
|
|
84
|
+
|
|
85
|
+
const stateHeze = getCachedBeaconState(stateHezeView, stateGloas);
|
|
86
|
+
stateHeze.commit();
|
|
87
|
+
// biome-ignore lint/complexity/useLiteralKeys: It is a protected attribute
|
|
88
|
+
stateHeze["clearCache"]();
|
|
89
|
+
|
|
90
|
+
return stateHeze;
|
|
91
|
+
}
|
package/src/stateTransition.ts
CHANGED
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
upgradeStateToDeneb,
|
|
17
17
|
upgradeStateToElectra,
|
|
18
18
|
upgradeStateToGloas,
|
|
19
|
+
upgradeStateToHeze,
|
|
19
20
|
} from "./slot/index.js";
|
|
20
21
|
import {upgradeStateToFulu} from "./slot/upgradeStateToFulu.js";
|
|
21
22
|
import {
|
|
@@ -26,6 +27,7 @@ import {
|
|
|
26
27
|
CachedBeaconStateDeneb,
|
|
27
28
|
CachedBeaconStateElectra,
|
|
28
29
|
CachedBeaconStateFulu,
|
|
30
|
+
CachedBeaconStateGloas,
|
|
29
31
|
CachedBeaconStatePhase0,
|
|
30
32
|
} from "./types.js";
|
|
31
33
|
import {computeEpochAtSlot} from "./util/index.js";
|
|
@@ -278,6 +280,9 @@ function processSlotsWithTransientCache(
|
|
|
278
280
|
if (stateEpoch === config.GLOAS_FORK_EPOCH) {
|
|
279
281
|
postState = upgradeStateToGloas(postState as CachedBeaconStateFulu) as CachedBeaconStateAllForks;
|
|
280
282
|
}
|
|
283
|
+
if (stateEpoch === config.HEZE_FORK_EPOCH) {
|
|
284
|
+
postState = upgradeStateToHeze(postState as CachedBeaconStateGloas) as CachedBeaconStateAllForks;
|
|
285
|
+
}
|
|
281
286
|
|
|
282
287
|
{
|
|
283
288
|
const timer = metrics?.epochTransitionStepTime.startTimer({step: EpochTransitionStep.finalProcessEpoch});
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
ForkPostElectra,
|
|
10
10
|
ForkPostFulu,
|
|
11
11
|
ForkPostGloas,
|
|
12
|
+
ForkPostHeze,
|
|
12
13
|
isForkPostAltair,
|
|
13
14
|
isForkPostBellatrix,
|
|
14
15
|
isForkPostCapella,
|
|
@@ -16,6 +17,7 @@ import {
|
|
|
16
17
|
isForkPostElectra,
|
|
17
18
|
isForkPostFulu,
|
|
18
19
|
isForkPostGloas,
|
|
20
|
+
isForkPostHeze,
|
|
19
21
|
} from "@lodestar/params";
|
|
20
22
|
import {
|
|
21
23
|
BeaconBlock,
|
|
@@ -267,14 +269,19 @@ export interface IBeaconStateViewGloas extends IBeaconStateViewFulu {
|
|
|
267
269
|
withParentPayloadApplied(executionRequests: gloas.ExecutionRequests): IBeaconStateViewGloas;
|
|
268
270
|
}
|
|
269
271
|
|
|
272
|
+
/** Heze+ state fields — use isStatePostHeze() guard */
|
|
273
|
+
export interface IBeaconStateViewHeze extends IBeaconStateViewGloas {
|
|
274
|
+
forkName: ForkPostHeze;
|
|
275
|
+
}
|
|
276
|
+
|
|
270
277
|
/**
|
|
271
278
|
* Type constraint for the concrete BeaconStateView class.
|
|
272
|
-
* Requires all fields from the latest fork interface (
|
|
279
|
+
* Requires all fields from the latest fork interface (IBeaconStateViewHeze) but keeps
|
|
273
280
|
* forkName as ForkName since the class wraps any fork's state.
|
|
274
281
|
* Sub-interfaces retain their narrowed forkName discriminants for caller-side type guards.
|
|
275
282
|
*/
|
|
276
283
|
export type IBeaconStateViewLatestFork = Omit<
|
|
277
|
-
|
|
284
|
+
IBeaconStateViewHeze,
|
|
278
285
|
"forkName" | "latestExecutionPayloadHeader" | "payloadBlockNumber"
|
|
279
286
|
> & {
|
|
280
287
|
forkName: ForkName;
|
|
@@ -337,3 +344,7 @@ export function isStatePostFulu(state: IBeaconStateView): state is IBeaconStateV
|
|
|
337
344
|
export function isStatePostGloas(state: IBeaconStateView): state is IBeaconStateViewGloas {
|
|
338
345
|
return isForkPostGloas(state.forkName);
|
|
339
346
|
}
|
|
347
|
+
|
|
348
|
+
export function isStatePostHeze(state: IBeaconStateView): state is IBeaconStateViewHeze {
|
|
349
|
+
return isForkPostHeze(state.forkName);
|
|
350
|
+
}
|
package/src/testUtils/state.ts
CHANGED
package/src/testUtils/util.ts
CHANGED
|
@@ -437,13 +437,13 @@ function buildPerformanceStatePhase0(pubkeysArg?: Uint8Array[]): phase0.BeaconSt
|
|
|
437
437
|
historicalRoots: [],
|
|
438
438
|
// Eth1
|
|
439
439
|
eth1Data: {
|
|
440
|
-
depositCount: pubkeys.length,
|
|
440
|
+
depositCount: BigInt(pubkeys.length),
|
|
441
441
|
depositRoot: fromHexString("0xcb1f89a924cfd31224823db5a41b1643f10faa7aedf231f1e28887f6ee98c047"),
|
|
442
442
|
blockHash: fromHexString("0x701fb2869ce16d0f1d14f6705725adb0dec6799da29006dfc6fff83960298f21"),
|
|
443
443
|
},
|
|
444
444
|
// minus one so that inserting 1 from block works
|
|
445
445
|
eth1DataVotes: newFilledArray(EPOCHS_PER_ETH1_VOTING_PERIOD * SLOTS_PER_EPOCH - 1, {
|
|
446
|
-
depositCount:
|
|
446
|
+
depositCount: 1n,
|
|
447
447
|
depositRoot: Buffer.alloc(32, 1),
|
|
448
448
|
blockHash: Buffer.alloc(32, 1),
|
|
449
449
|
}),
|
package/src/types.ts
CHANGED
|
@@ -10,6 +10,7 @@ export type {
|
|
|
10
10
|
CachedBeaconStateExecutions,
|
|
11
11
|
CachedBeaconStateFulu,
|
|
12
12
|
CachedBeaconStateGloas,
|
|
13
|
+
CachedBeaconStateHeze,
|
|
13
14
|
CachedBeaconStatePhase0,
|
|
14
15
|
} from "./cache/stateCache.js";
|
|
15
16
|
export type {
|
|
@@ -22,6 +23,7 @@ export type {
|
|
|
22
23
|
BeaconStateExecutions,
|
|
23
24
|
BeaconStateFulu,
|
|
24
25
|
BeaconStateGloas,
|
|
26
|
+
BeaconStateHeze,
|
|
25
27
|
BeaconStatePhase0,
|
|
26
28
|
ShufflingGetter,
|
|
27
29
|
} from "./cache/types.js";
|