@lodestar/state-transition 1.22.0-dev.9c62011986 → 1.22.0-dev.9f4bf50408
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/LICENSE +201 -165
- package/lib/block/index.js +1 -1
- package/lib/block/index.js.map +1 -1
- package/lib/block/initiateValidatorExit.d.ts +2 -1
- package/lib/block/initiateValidatorExit.js +21 -13
- package/lib/block/initiateValidatorExit.js.map +1 -1
- package/lib/block/isValidIndexedAttestation.js +5 -2
- package/lib/block/isValidIndexedAttestation.js.map +1 -1
- package/lib/block/processAttestationPhase0.d.ts +2 -2
- package/lib/block/processAttestationPhase0.js +33 -11
- package/lib/block/processAttestationPhase0.js.map +1 -1
- package/lib/block/processAttestations.d.ts +2 -2
- package/lib/block/processAttestations.js.map +1 -1
- package/lib/block/processAttestationsAltair.d.ts +2 -2
- package/lib/block/processAttestationsAltair.js +3 -3
- package/lib/block/processAttestationsAltair.js.map +1 -1
- package/lib/block/processBlockHeader.js +3 -2
- package/lib/block/processBlockHeader.js.map +1 -1
- package/lib/block/processBlsToExecutionChange.js +3 -2
- package/lib/block/processBlsToExecutionChange.js.map +1 -1
- package/lib/block/processConsolidationRequest.d.ts +4 -0
- package/lib/block/processConsolidationRequest.js +55 -0
- package/lib/block/processConsolidationRequest.js.map +1 -0
- package/lib/block/processDeposit.d.ts +8 -0
- package/lib/block/processDeposit.js +94 -54
- package/lib/block/processDeposit.js.map +1 -1
- package/lib/block/processDepositRequest.d.ts +5 -0
- package/lib/block/processDepositRequest.js +9 -0
- package/lib/block/processDepositRequest.js.map +1 -0
- package/lib/block/processExecutionPayload.js +4 -3
- package/lib/block/processExecutionPayload.js.map +1 -1
- package/lib/block/processOperations.d.ts +4 -1
- package/lib/block/processOperations.js +21 -4
- package/lib/block/processOperations.js.map +1 -1
- package/lib/block/processVoluntaryExit.d.ts +2 -1
- package/lib/block/processVoluntaryExit.js +16 -6
- package/lib/block/processVoluntaryExit.js.map +1 -1
- package/lib/block/processWithdrawalRequest.d.ts +5 -0
- package/lib/block/processWithdrawalRequest.js +67 -0
- package/lib/block/processWithdrawalRequest.js.map +1 -0
- package/lib/block/processWithdrawals.d.ts +5 -3
- package/lib/block/processWithdrawals.js +70 -17
- package/lib/block/processWithdrawals.js.map +1 -1
- package/lib/block/slashValidator.js +9 -5
- package/lib/block/slashValidator.js.map +1 -1
- package/lib/cache/effectiveBalanceIncrements.d.ts +3 -4
- package/lib/cache/effectiveBalanceIncrements.js +5 -5
- package/lib/cache/effectiveBalanceIncrements.js.map +1 -1
- package/lib/cache/epochCache.d.ts +66 -8
- package/lib/cache/epochCache.js +185 -22
- package/lib/cache/epochCache.js.map +1 -1
- package/lib/cache/epochTransitionCache.d.ts +12 -2
- package/lib/cache/epochTransitionCache.js +6 -3
- package/lib/cache/epochTransitionCache.js.map +1 -1
- package/lib/cache/pubkeyCache.d.ts +23 -3
- package/lib/cache/pubkeyCache.js +8 -1
- package/lib/cache/pubkeyCache.js.map +1 -1
- package/lib/cache/stateCache.d.ts +4 -2
- package/lib/cache/stateCache.js +2 -1
- package/lib/cache/stateCache.js.map +1 -1
- package/lib/cache/syncCommitteeCache.js +2 -2
- package/lib/cache/syncCommitteeCache.js.map +1 -1
- package/lib/cache/types.d.ts +1 -0
- package/lib/epoch/index.d.ts +6 -2
- package/lib/epoch/index.js +27 -5
- package/lib/epoch/index.js.map +1 -1
- package/lib/epoch/processEffectiveBalanceUpdates.d.ts +4 -1
- package/lib/epoch/processEffectiveBalanceUpdates.js +25 -6
- package/lib/epoch/processEffectiveBalanceUpdates.js.map +1 -1
- package/lib/epoch/processPendingBalanceDeposits.d.ts +12 -0
- package/lib/epoch/processPendingBalanceDeposits.js +68 -0
- package/lib/epoch/processPendingBalanceDeposits.js.map +1 -0
- package/lib/epoch/processPendingConsolidations.d.ts +16 -0
- package/lib/epoch/processPendingConsolidations.js +49 -0
- package/lib/epoch/processPendingConsolidations.js.map +1 -0
- package/lib/epoch/processRegistryUpdates.d.ts +2 -1
- package/lib/epoch/processRegistryUpdates.js +6 -3
- package/lib/epoch/processRegistryUpdates.js.map +1 -1
- package/lib/epoch/processRewardsAndPenalties.js +2 -1
- package/lib/epoch/processRewardsAndPenalties.js.map +1 -1
- package/lib/epoch/processSyncCommitteeUpdates.d.ts +2 -1
- package/lib/epoch/processSyncCommitteeUpdates.js +4 -3
- package/lib/epoch/processSyncCommitteeUpdates.js.map +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/metrics.d.ts +5 -0
- package/lib/metrics.js.map +1 -1
- package/lib/signatureSets/attesterSlashings.d.ts +3 -3
- package/lib/signatureSets/attesterSlashings.js +1 -2
- package/lib/signatureSets/attesterSlashings.js.map +1 -1
- package/lib/signatureSets/index.js +2 -2
- package/lib/signatureSets/index.js.map +1 -1
- package/lib/signatureSets/indexedAttestation.js +2 -1
- package/lib/signatureSets/indexedAttestation.js.map +1 -1
- package/lib/slot/index.d.ts +1 -0
- 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/upgradeStateToElectra.d.ts +8 -0
- package/lib/slot/upgradeStateToElectra.js +138 -0
- package/lib/slot/upgradeStateToElectra.js.map +1 -0
- package/lib/stateTransition.d.ts +1 -0
- package/lib/stateTransition.js +12 -8
- package/lib/stateTransition.js.map +1 -1
- package/lib/types.d.ts +2 -2
- package/lib/util/balance.js +2 -2
- package/lib/util/balance.js.map +1 -1
- package/lib/util/deposit.d.ts +4 -0
- package/lib/util/deposit.js +22 -0
- package/lib/util/deposit.js.map +1 -0
- package/lib/util/electra.d.ts +8 -0
- package/lib/util/electra.js +47 -0
- package/lib/util/electra.js.map +1 -0
- package/lib/util/epoch.d.ts +4 -1
- package/lib/util/epoch.js +37 -0
- package/lib/util/epoch.js.map +1 -1
- package/lib/util/epochShuffling.js +2 -3
- package/lib/util/epochShuffling.js.map +1 -1
- package/lib/util/execution.js +8 -0
- package/lib/util/execution.js.map +1 -1
- package/lib/util/genesis.d.ts +1 -1
- package/lib/util/genesis.js +30 -9
- package/lib/util/genesis.js.map +1 -1
- package/lib/util/index.d.ts +3 -0
- package/lib/util/index.js +3 -0
- package/lib/util/index.js.map +1 -1
- package/lib/util/loadState/index.d.ts +1 -1
- package/lib/util/loadState/index.js +1 -1
- package/lib/util/loadState/index.js.map +1 -1
- package/lib/util/loadState/loadState.d.ts +7 -0
- package/lib/util/loadState/loadState.js +15 -0
- package/lib/util/loadState/loadState.js.map +1 -1
- package/lib/util/seed.d.ts +4 -3
- package/lib/util/seed.js +11 -10
- package/lib/util/seed.js.map +1 -1
- package/lib/util/syncCommittee.d.ts +2 -1
- package/lib/util/syncCommittee.js +2 -2
- package/lib/util/syncCommittee.js.map +1 -1
- package/lib/util/validator.d.ts +10 -1
- package/lib/util/validator.js +35 -1
- package/lib/util/validator.js.map +1 -1
- package/lib/util/weakSubjectivity.js +2 -2
- package/lib/util/weakSubjectivity.js.map +1 -1
- package/package.json +9 -8
package/lib/cache/stateCache.js
CHANGED
|
@@ -4,6 +4,7 @@ import { EpochCache } from "./epochCache.js";
|
|
|
4
4
|
import { createEmptyRewardCache } from "./rewardCache.js";
|
|
5
5
|
/**
|
|
6
6
|
* Create CachedBeaconState computing a new EpochCache instance
|
|
7
|
+
* TODO ELECTRA: rename this to createFinalizedCachedBeaconState() as it's intended for finalized state only
|
|
7
8
|
*/
|
|
8
9
|
export function createCachedBeaconState(state, immutableData, opts) {
|
|
9
10
|
const epochCache = EpochCache.createFromState(state, immutableData, opts);
|
|
@@ -21,7 +22,7 @@ export function createCachedBeaconState(state, immutableData, opts) {
|
|
|
21
22
|
* Create a CachedBeaconState given a cached seed state and state bytes
|
|
22
23
|
* This guarantees that the returned state shares the same tree with the seed state
|
|
23
24
|
* Check loadState() api for more details
|
|
24
|
-
* // TODO: rename to loadUnfinalizedCachedBeaconState() due to
|
|
25
|
+
* // TODO: rename to loadUnfinalizedCachedBeaconState() due to ELECTRA
|
|
25
26
|
*/
|
|
26
27
|
export function loadCachedBeaconState(cachedSeedState, stateBytes, opts, seedValidatorsBytes) {
|
|
27
28
|
const { state: migratedState, modifiedValidators } = loadState(cachedSeedState.config, cachedSeedState, stateBytes, seedValidatorsBytes);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stateCache.js","sourceRoot":"","sources":["../../src/cache/stateCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAC,SAAS,EAAC,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAC,UAAU,EAA0C,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"stateCache.js","sourceRoot":"","sources":["../../src/cache/stateCache.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { toPubkeyHex } from "@lodestar/utils";
|
|
2
2
|
/** Placeholder object for pre-altair fork */
|
|
3
3
|
export class SyncCommitteeCacheEmpty {
|
|
4
4
|
get validatorIndices() {
|
|
@@ -51,7 +51,7 @@ function computeSyncCommitteeIndices(syncCommittee, pubkey2index) {
|
|
|
51
51
|
for (const pubkey of pubkeys) {
|
|
52
52
|
const validatorIndex = pubkey2index.get(pubkey);
|
|
53
53
|
if (validatorIndex === undefined) {
|
|
54
|
-
throw Error(`SyncCommittee pubkey is unknown ${
|
|
54
|
+
throw Error(`SyncCommittee pubkey is unknown ${toPubkeyHex(pubkey)}`);
|
|
55
55
|
}
|
|
56
56
|
validatorIndices.push(validatorIndex);
|
|
57
57
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncCommitteeCache.js","sourceRoot":"","sources":["../../src/cache/syncCommitteeCache.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"syncCommitteeCache.js","sourceRoot":"","sources":["../../src/cache/syncCommitteeCache.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAkB5C,6CAA6C;AAC7C,MAAM,OAAO,uBAAuB;IAClC,IAAI,gBAAgB;QAClB,MAAM,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,iBAAiB;QACnB,MAAM,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC1C,CAAC;CACF;AAED,MAAM,UAAU,qBAAqB,CAAC,gBAAkC;IACtE,OAAO;QACL,gBAAgB;QAChB,iBAAiB,EAAE,sBAAsB,CAAC,gBAAgB,CAAC;KAC5D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,aAA+D,EAC/D,YAA4B;IAE5B,MAAM,gBAAgB,GAAG,2BAA2B,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAClF,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;IACnE,OAAO;QACL,gBAAgB;QAChB,iBAAiB;KAClB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,oBAAsC;IAC3E,MAAM,GAAG,GAAG,IAAI,GAAG,EAA4B,CAAC;IAEhD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,oBAAoB,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAChE,MAAM,cAAc,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,SAAS,2BAA2B,CAClC,aAA+D,EAC/D,YAA4B;IAE5B,MAAM,gBAAgB,GAAqB,EAAE,CAAC;IAC9C,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;IACvD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,cAAc,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,KAAK,CAAC,mCAAmC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC"}
|
package/lib/cache/types.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export type BeaconStateAltair = CompositeViewDU<SSZTypesFor<ForkName.altair, "Be
|
|
|
7
7
|
export type BeaconStateBellatrix = CompositeViewDU<SSZTypesFor<ForkName.bellatrix, "BeaconState">>;
|
|
8
8
|
export type BeaconStateCapella = CompositeViewDU<SSZTypesFor<ForkName.capella, "BeaconState">>;
|
|
9
9
|
export type BeaconStateDeneb = CompositeViewDU<SSZTypesFor<ForkName.deneb, "BeaconState">>;
|
|
10
|
+
export type BeaconStateElectra = CompositeViewDU<SSZTypesFor<ForkName.electra, "BeaconState">>;
|
|
10
11
|
export type BeaconStateAllForks = CompositeViewDU<SSZTypesFor<ForkAll, "BeaconState">>;
|
|
11
12
|
export type BeaconStateExecutions = CompositeViewDU<SSZTypesFor<ForkExecution, "BeaconState">>;
|
|
12
13
|
export type ShufflingGetter = (shufflingEpoch: Epoch, dependentRoot: RootHex) => EpochShuffling | null;
|
package/lib/epoch/index.d.ts
CHANGED
|
@@ -15,8 +15,10 @@ import { processRewardsAndPenalties } from "./processRewardsAndPenalties.js";
|
|
|
15
15
|
import { processSlashings } from "./processSlashings.js";
|
|
16
16
|
import { processSlashingsReset } from "./processSlashingsReset.js";
|
|
17
17
|
import { processSyncCommitteeUpdates } from "./processSyncCommitteeUpdates.js";
|
|
18
|
+
import { processPendingBalanceDeposits } from "./processPendingBalanceDeposits.js";
|
|
19
|
+
import { processPendingConsolidations } from "./processPendingConsolidations.js";
|
|
18
20
|
export { getRewardsAndPenalties } from "./processRewardsAndPenalties.js";
|
|
19
|
-
export { processJustificationAndFinalization, processInactivityUpdates, processRewardsAndPenalties, processRegistryUpdates, processSlashings, processEth1DataReset, processEffectiveBalanceUpdates, processSlashingsReset, processRandaoMixesReset, processHistoricalRootsUpdate, processParticipationRecordUpdates, processParticipationFlagUpdates, processSyncCommitteeUpdates, processHistoricalSummariesUpdate, };
|
|
21
|
+
export { processJustificationAndFinalization, processInactivityUpdates, processRewardsAndPenalties, processRegistryUpdates, processSlashings, processEth1DataReset, processEffectiveBalanceUpdates, processSlashingsReset, processRandaoMixesReset, processHistoricalRootsUpdate, processParticipationRecordUpdates, processParticipationFlagUpdates, processSyncCommitteeUpdates, processHistoricalSummariesUpdate, processPendingBalanceDeposits, processPendingConsolidations, };
|
|
20
22
|
export { computeUnrealizedCheckpoints } from "./computeUnrealizedCheckpoints.js";
|
|
21
23
|
/**
|
|
22
24
|
* Epoch transition steps tracked in metrics
|
|
@@ -31,7 +33,9 @@ export declare enum EpochTransitionStep {
|
|
|
31
33
|
processRewardsAndPenalties = "processRewardsAndPenalties",
|
|
32
34
|
processEffectiveBalanceUpdates = "processEffectiveBalanceUpdates",
|
|
33
35
|
processParticipationFlagUpdates = "processParticipationFlagUpdates",
|
|
34
|
-
processSyncCommitteeUpdates = "processSyncCommitteeUpdates"
|
|
36
|
+
processSyncCommitteeUpdates = "processSyncCommitteeUpdates",
|
|
37
|
+
processPendingBalanceDeposits = "processPendingBalanceDeposits",
|
|
38
|
+
processPendingConsolidations = "processPendingConsolidations"
|
|
35
39
|
}
|
|
36
40
|
export declare function processEpoch(fork: ForkSeq, state: CachedBeaconStateAllForks, cache: EpochTransitionCache, metrics?: BeaconStateTransitionMetrics | null): void;
|
|
37
41
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/epoch/index.js
CHANGED
|
@@ -13,9 +13,11 @@ import { processRewardsAndPenalties } from "./processRewardsAndPenalties.js";
|
|
|
13
13
|
import { processSlashings } from "./processSlashings.js";
|
|
14
14
|
import { processSlashingsReset } from "./processSlashingsReset.js";
|
|
15
15
|
import { processSyncCommitteeUpdates } from "./processSyncCommitteeUpdates.js";
|
|
16
|
+
import { processPendingBalanceDeposits } from "./processPendingBalanceDeposits.js";
|
|
17
|
+
import { processPendingConsolidations } from "./processPendingConsolidations.js";
|
|
16
18
|
// For spec tests
|
|
17
19
|
export { getRewardsAndPenalties } from "./processRewardsAndPenalties.js";
|
|
18
|
-
export { processJustificationAndFinalization, processInactivityUpdates, processRewardsAndPenalties, processRegistryUpdates, processSlashings, processEth1DataReset, processEffectiveBalanceUpdates, processSlashingsReset, processRandaoMixesReset, processHistoricalRootsUpdate, processParticipationRecordUpdates, processParticipationFlagUpdates, processSyncCommitteeUpdates, processHistoricalSummariesUpdate, };
|
|
20
|
+
export { processJustificationAndFinalization, processInactivityUpdates, processRewardsAndPenalties, processRegistryUpdates, processSlashings, processEth1DataReset, processEffectiveBalanceUpdates, processSlashingsReset, processRandaoMixesReset, processHistoricalRootsUpdate, processParticipationRecordUpdates, processParticipationFlagUpdates, processSyncCommitteeUpdates, processHistoricalSummariesUpdate, processPendingBalanceDeposits, processPendingConsolidations, };
|
|
19
21
|
export { computeUnrealizedCheckpoints } from "./computeUnrealizedCheckpoints.js";
|
|
20
22
|
const maxValidatorsPerStateSlashing = SLOTS_PER_EPOCH * MAX_ATTESTER_SLASHINGS * MAX_VALIDATORS_PER_COMMITTEE;
|
|
21
23
|
const maxSafeValidators = Math.floor(Number.MAX_SAFE_INTEGER / MAX_EFFECTIVE_BALANCE);
|
|
@@ -34,12 +36,14 @@ export var EpochTransitionStep;
|
|
|
34
36
|
EpochTransitionStep["processEffectiveBalanceUpdates"] = "processEffectiveBalanceUpdates";
|
|
35
37
|
EpochTransitionStep["processParticipationFlagUpdates"] = "processParticipationFlagUpdates";
|
|
36
38
|
EpochTransitionStep["processSyncCommitteeUpdates"] = "processSyncCommitteeUpdates";
|
|
39
|
+
EpochTransitionStep["processPendingBalanceDeposits"] = "processPendingBalanceDeposits";
|
|
40
|
+
EpochTransitionStep["processPendingConsolidations"] = "processPendingConsolidations";
|
|
37
41
|
})(EpochTransitionStep || (EpochTransitionStep = {}));
|
|
38
42
|
export function processEpoch(fork, state, cache, metrics) {
|
|
39
43
|
// state.slashings is initially a Gwei (BigInt) vector, however since Nov 2023 it's converted to UintNum64 (number) vector in the state transition because:
|
|
40
44
|
// - state.slashings[nextEpoch % EPOCHS_PER_SLASHINGS_VECTOR] is reset per epoch in processSlashingsReset()
|
|
41
45
|
// - max slashed validators per epoch is SLOTS_PER_EPOCH * MAX_ATTESTER_SLASHINGS * MAX_VALIDATORS_PER_COMMITTEE which is 32 * 2 * 2048 = 131072 on mainnet
|
|
42
|
-
// - with that and 32_000_000_000 MAX_EFFECTIVE_BALANCE, it still fits in a number given that Math.floor(Number.MAX_SAFE_INTEGER / 32_000_000_000) = 281474
|
|
46
|
+
// - with that and 32_000_000_000 MAX_EFFECTIVE_BALANCE or 2048_000_000_000 MAX_EFFECTIVE_BALANCE_ELECTRA, it still fits in a number given that Math.floor(Number.MAX_SAFE_INTEGER / 32_000_000_000) = 281474
|
|
43
47
|
if (maxValidatorsPerStateSlashing > maxSafeValidators) {
|
|
44
48
|
throw new Error("Lodestar does not support this network, parameters don't fit number value inside state.slashings");
|
|
45
49
|
}
|
|
@@ -60,7 +64,7 @@ export function processEpoch(fork, state, cache, metrics) {
|
|
|
60
64
|
// processRewardsAndPenalties(state, cache);
|
|
61
65
|
{
|
|
62
66
|
const timer = metrics?.epochTransitionStepTime.startTimer({ step: EpochTransitionStep.processRegistryUpdates });
|
|
63
|
-
processRegistryUpdates(state, cache);
|
|
67
|
+
processRegistryUpdates(fork, state, cache);
|
|
64
68
|
timer?.();
|
|
65
69
|
}
|
|
66
70
|
// accumulate slashing penalties and only update balances once in processRewardsAndPenalties()
|
|
@@ -76,12 +80,30 @@ export function processEpoch(fork, state, cache, metrics) {
|
|
|
76
80
|
timer?.();
|
|
77
81
|
}
|
|
78
82
|
processEth1DataReset(state, cache);
|
|
83
|
+
if (fork >= ForkSeq.electra) {
|
|
84
|
+
const stateElectra = state;
|
|
85
|
+
{
|
|
86
|
+
const timer = metrics?.epochTransitionStepTime.startTimer({
|
|
87
|
+
step: EpochTransitionStep.processPendingBalanceDeposits,
|
|
88
|
+
});
|
|
89
|
+
processPendingBalanceDeposits(stateElectra, cache);
|
|
90
|
+
timer?.();
|
|
91
|
+
}
|
|
92
|
+
{
|
|
93
|
+
const timer = metrics?.epochTransitionStepTime.startTimer({
|
|
94
|
+
step: EpochTransitionStep.processPendingConsolidations,
|
|
95
|
+
});
|
|
96
|
+
processPendingConsolidations(stateElectra, cache);
|
|
97
|
+
timer?.();
|
|
98
|
+
}
|
|
99
|
+
}
|
|
79
100
|
{
|
|
80
101
|
const timer = metrics?.epochTransitionStepTime.startTimer({
|
|
81
102
|
step: EpochTransitionStep.processEffectiveBalanceUpdates,
|
|
82
103
|
});
|
|
83
|
-
processEffectiveBalanceUpdates(state, cache);
|
|
104
|
+
const numUpdate = processEffectiveBalanceUpdates(fork, state, cache);
|
|
84
105
|
timer?.();
|
|
106
|
+
metrics?.numEffectiveBalanceUpdates.set(numUpdate);
|
|
85
107
|
}
|
|
86
108
|
processSlashingsReset(state, cache);
|
|
87
109
|
processRandaoMixesReset(state, cache);
|
|
@@ -106,7 +128,7 @@ export function processEpoch(fork, state, cache, metrics) {
|
|
|
106
128
|
const timer = metrics?.epochTransitionStepTime.startTimer({
|
|
107
129
|
step: EpochTransitionStep.processSyncCommitteeUpdates,
|
|
108
130
|
});
|
|
109
|
-
processSyncCommitteeUpdates(state);
|
|
131
|
+
processSyncCommitteeUpdates(fork, state);
|
|
110
132
|
timer?.();
|
|
111
133
|
}
|
|
112
134
|
}
|
package/lib/epoch/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/epoch/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,sBAAsB,EACtB,qBAAqB,EACrB,4BAA4B,EAC5B,eAAe,GAChB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/epoch/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ForkSeq } from "@lodestar/params";
|
|
1
2
|
import { EpochTransitionCache, CachedBeaconStateAllForks } from "../types.js";
|
|
2
3
|
/**
|
|
3
4
|
* Update effective balances if validator.balance has changed enough
|
|
@@ -8,6 +9,8 @@ import { EpochTransitionCache, CachedBeaconStateAllForks } from "../types.js";
|
|
|
8
9
|
*
|
|
9
10
|
* - On normal mainnet conditions 0 validators change their effective balance
|
|
10
11
|
* - In case of big innactivity event a medium portion of validators may have their effectiveBalance updated
|
|
12
|
+
*
|
|
13
|
+
* Return number of validators updated
|
|
11
14
|
*/
|
|
12
|
-
export declare function processEffectiveBalanceUpdates(state: CachedBeaconStateAllForks, cache: EpochTransitionCache):
|
|
15
|
+
export declare function processEffectiveBalanceUpdates(fork: ForkSeq, state: CachedBeaconStateAllForks, cache: EpochTransitionCache): number;
|
|
13
16
|
//# sourceMappingURL=processEffectiveBalanceUpdates.d.ts.map
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { EFFECTIVE_BALANCE_INCREMENT, ForkSeq, HYSTERESIS_DOWNWARD_MULTIPLIER, HYSTERESIS_QUOTIENT, HYSTERESIS_UPWARD_MULTIPLIER, MAX_EFFECTIVE_BALANCE, TIMELY_TARGET_FLAG_INDEX, } from "@lodestar/params";
|
|
1
|
+
import { EFFECTIVE_BALANCE_INCREMENT, ForkSeq, HYSTERESIS_DOWNWARD_MULTIPLIER, HYSTERESIS_QUOTIENT, HYSTERESIS_UPWARD_MULTIPLIER, MAX_EFFECTIVE_BALANCE, MAX_EFFECTIVE_BALANCE_ELECTRA, MIN_ACTIVATION_BALANCE, TIMELY_TARGET_FLAG_INDEX, } from "@lodestar/params";
|
|
2
|
+
import { hasCompoundingWithdrawalCredential } from "../util/electra.js";
|
|
2
3
|
/** Same to https://github.com/ethereum/eth2.0-specs/blob/v1.1.0-alpha.5/specs/altair/beacon-chain.md#has_flag */
|
|
3
4
|
const TIMELY_TARGET = 1 << TIMELY_TARGET_FLAG_INDEX;
|
|
4
5
|
/**
|
|
@@ -10,8 +11,10 @@ const TIMELY_TARGET = 1 << TIMELY_TARGET_FLAG_INDEX;
|
|
|
10
11
|
*
|
|
11
12
|
* - On normal mainnet conditions 0 validators change their effective balance
|
|
12
13
|
* - In case of big innactivity event a medium portion of validators may have their effectiveBalance updated
|
|
14
|
+
*
|
|
15
|
+
* Return number of validators updated
|
|
13
16
|
*/
|
|
14
|
-
export function processEffectiveBalanceUpdates(state, cache) {
|
|
17
|
+
export function processEffectiveBalanceUpdates(fork, state, cache) {
|
|
15
18
|
const HYSTERESIS_INCREMENT = EFFECTIVE_BALANCE_INCREMENT / HYSTERESIS_QUOTIENT;
|
|
16
19
|
const DOWNWARD_THRESHOLD = HYSTERESIS_INCREMENT * HYSTERESIS_DOWNWARD_MULTIPLIER;
|
|
17
20
|
const UPWARD_THRESHOLD = HYSTERESIS_INCREMENT * HYSTERESIS_UPWARD_MULTIPLIER;
|
|
@@ -20,23 +23,37 @@ export function processEffectiveBalanceUpdates(state, cache) {
|
|
|
20
23
|
const forkSeq = epochCtx.config.getForkSeq(state.slot);
|
|
21
24
|
let nextEpochTotalActiveBalanceByIncrement = 0;
|
|
22
25
|
// update effective balances with hysteresis
|
|
23
|
-
// epochTransitionCache.balances is
|
|
24
|
-
//
|
|
26
|
+
// epochTransitionCache.balances is initialized in processRewardsAndPenalties()
|
|
27
|
+
// and updated in processPendingBalanceDeposits() and processPendingConsolidations()
|
|
28
|
+
// so it's recycled here for performance.
|
|
25
29
|
const balances = cache.balances ?? state.balances.getAll();
|
|
30
|
+
const currentEpochValidators = cache.validators;
|
|
31
|
+
const newCompoundingValidators = cache.newCompoundingValidators ?? new Set();
|
|
32
|
+
let numUpdate = 0;
|
|
26
33
|
for (let i = 0, len = balances.length; i < len; i++) {
|
|
27
34
|
const balance = balances[i];
|
|
28
35
|
// PERF: It's faster to access to get() every single element (4ms) than to convert to regular array then loop (9ms)
|
|
29
36
|
let effectiveBalanceIncrement = effectiveBalanceIncrements[i];
|
|
30
37
|
let effectiveBalance = effectiveBalanceIncrement * EFFECTIVE_BALANCE_INCREMENT;
|
|
38
|
+
let effectiveBalanceLimit;
|
|
39
|
+
if (fork < ForkSeq.electra) {
|
|
40
|
+
effectiveBalanceLimit = MAX_EFFECTIVE_BALANCE;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
// from electra, effectiveBalanceLimit is per validator
|
|
44
|
+
const isCompoundingValidator = hasCompoundingWithdrawalCredential(currentEpochValidators[i].withdrawalCredentials) ||
|
|
45
|
+
newCompoundingValidators.has(i);
|
|
46
|
+
effectiveBalanceLimit = isCompoundingValidator ? MAX_EFFECTIVE_BALANCE_ELECTRA : MIN_ACTIVATION_BALANCE;
|
|
47
|
+
}
|
|
31
48
|
if (
|
|
32
49
|
// Too big
|
|
33
50
|
effectiveBalance > balance + DOWNWARD_THRESHOLD ||
|
|
34
51
|
// Too small. Check effectiveBalance < MAX_EFFECTIVE_BALANCE to prevent unnecessary updates
|
|
35
|
-
(effectiveBalance <
|
|
36
|
-
effectiveBalance = Math.min(balance - (balance % EFFECTIVE_BALANCE_INCREMENT), MAX_EFFECTIVE_BALANCE);
|
|
52
|
+
(effectiveBalance < effectiveBalanceLimit && effectiveBalance + UPWARD_THRESHOLD < balance)) {
|
|
37
53
|
// Update the state tree
|
|
38
54
|
// Should happen rarely, so it's fine to update the tree
|
|
39
55
|
const validator = validators.get(i);
|
|
56
|
+
effectiveBalance = Math.min(balance - (balance % EFFECTIVE_BALANCE_INCREMENT), effectiveBalanceLimit);
|
|
40
57
|
validator.effectiveBalance = effectiveBalance;
|
|
41
58
|
// Also update the fast cached version
|
|
42
59
|
const newEffectiveBalanceIncrement = Math.floor(effectiveBalance / EFFECTIVE_BALANCE_INCREMENT);
|
|
@@ -56,6 +73,7 @@ export function processEffectiveBalanceUpdates(state, cache) {
|
|
|
56
73
|
}
|
|
57
74
|
effectiveBalanceIncrement = newEffectiveBalanceIncrement;
|
|
58
75
|
effectiveBalanceIncrements[i] = effectiveBalanceIncrement;
|
|
76
|
+
numUpdate++;
|
|
59
77
|
}
|
|
60
78
|
// TODO: Do this in afterEpochTransitionCache, looping a Uint8Array should be very cheap
|
|
61
79
|
if (cache.isActiveNextEpoch[i]) {
|
|
@@ -64,5 +82,6 @@ export function processEffectiveBalanceUpdates(state, cache) {
|
|
|
64
82
|
}
|
|
65
83
|
}
|
|
66
84
|
cache.nextEpochTotalActiveBalanceByIncrement = nextEpochTotalActiveBalanceByIncrement;
|
|
85
|
+
return numUpdate;
|
|
67
86
|
}
|
|
68
87
|
//# sourceMappingURL=processEffectiveBalanceUpdates.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processEffectiveBalanceUpdates.js","sourceRoot":"","sources":["../../src/epoch/processEffectiveBalanceUpdates.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,OAAO,EACP,8BAA8B,EAC9B,mBAAmB,EACnB,4BAA4B,EAC5B,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"processEffectiveBalanceUpdates.js","sourceRoot":"","sources":["../../src/epoch/processEffectiveBalanceUpdates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CachedBeaconStateElectra, EpochTransitionCache } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Starting from Electra:
|
|
4
|
+
* Process pending balance deposits from state subject to churn limit and depsoitBalanceToConsume.
|
|
5
|
+
* For each eligible `deposit`, call `increaseBalance()`.
|
|
6
|
+
* Remove the processed deposits from `state.pendingBalanceDeposits`.
|
|
7
|
+
* Update `state.depositBalanceToConsume` for the next epoch
|
|
8
|
+
*
|
|
9
|
+
* TODO Electra: Update ssz library to support batch push to `pendingBalanceDeposits`
|
|
10
|
+
*/
|
|
11
|
+
export declare function processPendingBalanceDeposits(state: CachedBeaconStateElectra, cache: EpochTransitionCache): void;
|
|
12
|
+
//# sourceMappingURL=processPendingBalanceDeposits.d.ts.map
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { FAR_FUTURE_EPOCH } from "@lodestar/params";
|
|
2
|
+
import { increaseBalance } from "../util/balance.js";
|
|
3
|
+
import { getActivationExitChurnLimit } from "../util/validator.js";
|
|
4
|
+
/**
|
|
5
|
+
* Starting from Electra:
|
|
6
|
+
* Process pending balance deposits from state subject to churn limit and depsoitBalanceToConsume.
|
|
7
|
+
* For each eligible `deposit`, call `increaseBalance()`.
|
|
8
|
+
* Remove the processed deposits from `state.pendingBalanceDeposits`.
|
|
9
|
+
* Update `state.depositBalanceToConsume` for the next epoch
|
|
10
|
+
*
|
|
11
|
+
* TODO Electra: Update ssz library to support batch push to `pendingBalanceDeposits`
|
|
12
|
+
*/
|
|
13
|
+
export function processPendingBalanceDeposits(state, cache) {
|
|
14
|
+
const nextEpoch = state.epochCtx.epoch + 1;
|
|
15
|
+
const availableForProcessing = state.depositBalanceToConsume + BigInt(getActivationExitChurnLimit(state.epochCtx));
|
|
16
|
+
let processedAmount = 0n;
|
|
17
|
+
let nextDepositIndex = 0;
|
|
18
|
+
const depositsToPostpone = [];
|
|
19
|
+
const validators = state.validators;
|
|
20
|
+
const cachedBalances = cache.balances;
|
|
21
|
+
for (const deposit of state.pendingBalanceDeposits.getAllReadonly()) {
|
|
22
|
+
const { amount, index: depositIndex } = deposit;
|
|
23
|
+
const validator = validators.getReadonly(depositIndex);
|
|
24
|
+
// Validator is exiting, postpone the deposit until after withdrawable epoch
|
|
25
|
+
if (validator.exitEpoch < FAR_FUTURE_EPOCH) {
|
|
26
|
+
if (nextEpoch <= validator.withdrawableEpoch) {
|
|
27
|
+
depositsToPostpone.push(deposit);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
// Deposited balance will never become active. Increase balance but do not consume churn
|
|
31
|
+
increaseBalance(state, depositIndex, Number(amount));
|
|
32
|
+
if (cachedBalances) {
|
|
33
|
+
cachedBalances[depositIndex] += Number(amount);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
// Validator is not exiting, attempt to process deposit
|
|
39
|
+
if (processedAmount + amount > availableForProcessing) {
|
|
40
|
+
// Deposit does not fit in the churn, no more deposit processing in this epoch.
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
// Deposit fits in the churn, process it. Increase balance and consume churn.
|
|
45
|
+
increaseBalance(state, depositIndex, Number(amount));
|
|
46
|
+
if (cachedBalances) {
|
|
47
|
+
cachedBalances[depositIndex] += Number(amount);
|
|
48
|
+
}
|
|
49
|
+
processedAmount = processedAmount + amount;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Regardless of how the deposit was handled, we move on in the queue.
|
|
53
|
+
nextDepositIndex++;
|
|
54
|
+
}
|
|
55
|
+
const remainingPendingBalanceDeposits = state.pendingBalanceDeposits.sliceFrom(nextDepositIndex);
|
|
56
|
+
state.pendingBalanceDeposits = remainingPendingBalanceDeposits;
|
|
57
|
+
if (remainingPendingBalanceDeposits.length === 0) {
|
|
58
|
+
state.depositBalanceToConsume = 0n;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
state.depositBalanceToConsume = availableForProcessing - processedAmount;
|
|
62
|
+
}
|
|
63
|
+
// TODO Electra: add a function in ListCompositeTreeView to support batch push operation
|
|
64
|
+
for (const deposit of depositsToPostpone) {
|
|
65
|
+
state.pendingBalanceDeposits.push(deposit);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=processPendingBalanceDeposits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processPendingBalanceDeposits.js","sourceRoot":"","sources":["../../src/epoch/processPendingBalanceDeposits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAC,eAAe,EAAC,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAC,2BAA2B,EAAC,MAAM,sBAAsB,CAAC;AAEjE;;;;;;;;GAQG;AACH,MAAM,UAAU,6BAA6B,CAAC,KAA+B,EAAE,KAA2B;IACxG,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;IAC3C,MAAM,sBAAsB,GAAG,KAAK,CAAC,uBAAuB,GAAG,MAAM,CAAC,2BAA2B,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnH,IAAI,eAAe,GAAG,EAAE,CAAC;IACzB,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,MAAM,kBAAkB,GAAG,EAAE,CAAC;IAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IACpC,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC;IAEtC,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,sBAAsB,CAAC,cAAc,EAAE,EAAE,CAAC;QACpE,MAAM,EAAC,MAAM,EAAE,KAAK,EAAE,YAAY,EAAC,GAAG,OAAO,CAAC;QAC9C,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAEvD,4EAA4E;QAC5E,IAAI,SAAS,CAAC,SAAS,GAAG,gBAAgB,EAAE,CAAC;YAC3C,IAAI,SAAS,IAAI,SAAS,CAAC,iBAAiB,EAAE,CAAC;gBAC7C,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,wFAAwF;gBACxF,eAAe,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;gBACrD,IAAI,cAAc,EAAE,CAAC;oBACnB,cAAc,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,uDAAuD;YACvD,IAAI,eAAe,GAAG,MAAM,GAAG,sBAAsB,EAAE,CAAC;gBACtD,+EAA+E;gBAC/E,MAAM;YACR,CAAC;iBAAM,CAAC;gBACN,6EAA6E;gBAC7E,eAAe,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;gBACrD,IAAI,cAAc,EAAE,CAAC;oBACnB,cAAc,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;gBACjD,CAAC;gBACD,eAAe,GAAG,eAAe,GAAG,MAAM,CAAC;YAC7C,CAAC;QACH,CAAC;QACD,sEAAsE;QACtE,gBAAgB,EAAE,CAAC;IACrB,CAAC;IAED,MAAM,+BAA+B,GAAG,KAAK,CAAC,sBAAsB,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACjG,KAAK,CAAC,sBAAsB,GAAG,+BAA+B,CAAC;IAE/D,IAAI,+BAA+B,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjD,KAAK,CAAC,uBAAuB,GAAG,EAAE,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,uBAAuB,GAAG,sBAAsB,GAAG,eAAe,CAAC;IAC3E,CAAC;IAED,wFAAwF;IACxF,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE,CAAC;QACzC,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { CachedBeaconStateElectra, EpochTransitionCache } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Starting from Electra:
|
|
4
|
+
* Process every `pendingConsolidation` in `state.pendingConsolidations`.
|
|
5
|
+
* Churn limit was applied when enqueueing so we don't care about the limit here
|
|
6
|
+
* However we only process consolidations up to current epoch
|
|
7
|
+
*
|
|
8
|
+
* For each valid `pendingConsolidation`, update withdrawal credential of target
|
|
9
|
+
* validator to compounding, decrease balance of source validator and increase balance
|
|
10
|
+
* of target validator.
|
|
11
|
+
*
|
|
12
|
+
* Dequeue all processed consolidations from `state.pendingConsolidation`
|
|
13
|
+
*
|
|
14
|
+
*/
|
|
15
|
+
export declare function processPendingConsolidations(state: CachedBeaconStateElectra, cache: EpochTransitionCache): void;
|
|
16
|
+
//# sourceMappingURL=processPendingConsolidations.d.ts.map
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { decreaseBalance, increaseBalance } from "../util/balance.js";
|
|
2
|
+
import { getActiveBalance } from "../util/validator.js";
|
|
3
|
+
import { switchToCompoundingValidator } from "../util/electra.js";
|
|
4
|
+
/**
|
|
5
|
+
* Starting from Electra:
|
|
6
|
+
* Process every `pendingConsolidation` in `state.pendingConsolidations`.
|
|
7
|
+
* Churn limit was applied when enqueueing so we don't care about the limit here
|
|
8
|
+
* However we only process consolidations up to current epoch
|
|
9
|
+
*
|
|
10
|
+
* For each valid `pendingConsolidation`, update withdrawal credential of target
|
|
11
|
+
* validator to compounding, decrease balance of source validator and increase balance
|
|
12
|
+
* of target validator.
|
|
13
|
+
*
|
|
14
|
+
* Dequeue all processed consolidations from `state.pendingConsolidation`
|
|
15
|
+
*
|
|
16
|
+
*/
|
|
17
|
+
export function processPendingConsolidations(state, cache) {
|
|
18
|
+
const nextEpoch = state.epochCtx.epoch + 1;
|
|
19
|
+
let nextPendingConsolidation = 0;
|
|
20
|
+
const validators = state.validators;
|
|
21
|
+
const cachedBalances = cache.balances;
|
|
22
|
+
const newCompoundingValidators = new Set();
|
|
23
|
+
for (const pendingConsolidation of state.pendingConsolidations.getAllReadonly()) {
|
|
24
|
+
const { sourceIndex, targetIndex } = pendingConsolidation;
|
|
25
|
+
const sourceValidator = validators.getReadonly(sourceIndex);
|
|
26
|
+
if (sourceValidator.slashed) {
|
|
27
|
+
nextPendingConsolidation++;
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
if (sourceValidator.withdrawableEpoch > nextEpoch) {
|
|
31
|
+
break;
|
|
32
|
+
}
|
|
33
|
+
// Churn any target excess active balance of target and raise its max
|
|
34
|
+
switchToCompoundingValidator(state, targetIndex);
|
|
35
|
+
newCompoundingValidators.add(targetIndex);
|
|
36
|
+
// Move active balance to target. Excess balance is withdrawable.
|
|
37
|
+
const activeBalance = getActiveBalance(state, sourceIndex);
|
|
38
|
+
decreaseBalance(state, sourceIndex, activeBalance);
|
|
39
|
+
increaseBalance(state, targetIndex, activeBalance);
|
|
40
|
+
if (cachedBalances) {
|
|
41
|
+
cachedBalances[sourceIndex] -= activeBalance;
|
|
42
|
+
cachedBalances[targetIndex] += activeBalance;
|
|
43
|
+
}
|
|
44
|
+
nextPendingConsolidation++;
|
|
45
|
+
}
|
|
46
|
+
cache.newCompoundingValidators = newCompoundingValidators;
|
|
47
|
+
state.pendingConsolidations = state.pendingConsolidations.sliceFrom(nextPendingConsolidation);
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=processPendingConsolidations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processPendingConsolidations.js","sourceRoot":"","sources":["../../src/epoch/processPendingConsolidations.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,eAAe,EAAE,eAAe,EAAC,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAC,4BAA4B,EAAC,MAAM,oBAAoB,CAAC;AAEhE;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,4BAA4B,CAAC,KAA+B,EAAE,KAA2B;IACvG,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;IAC3C,IAAI,wBAAwB,GAAG,CAAC,CAAC;IACjC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IACpC,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC;IACtC,MAAM,wBAAwB,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE3D,KAAK,MAAM,oBAAoB,IAAI,KAAK,CAAC,qBAAqB,CAAC,cAAc,EAAE,EAAE,CAAC;QAChF,MAAM,EAAC,WAAW,EAAE,WAAW,EAAC,GAAG,oBAAoB,CAAC;QACxD,MAAM,eAAe,GAAG,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAE5D,IAAI,eAAe,CAAC,OAAO,EAAE,CAAC;YAC5B,wBAAwB,EAAE,CAAC;YAC3B,SAAS;QACX,CAAC;QAED,IAAI,eAAe,CAAC,iBAAiB,GAAG,SAAS,EAAE,CAAC;YAClD,MAAM;QACR,CAAC;QACD,qEAAqE;QACrE,4BAA4B,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACjD,wBAAwB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC1C,iEAAiE;QACjE,MAAM,aAAa,GAAG,gBAAgB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC3D,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;QACnD,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;QACnD,IAAI,cAAc,EAAE,CAAC;YACnB,cAAc,CAAC,WAAW,CAAC,IAAI,aAAa,CAAC;YAC7C,cAAc,CAAC,WAAW,CAAC,IAAI,aAAa,CAAC;QAC/C,CAAC;QAED,wBAAwB,EAAE,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,wBAAwB,GAAG,wBAAwB,CAAC;IAC1D,KAAK,CAAC,qBAAqB,GAAG,KAAK,CAAC,qBAAqB,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;AAChG,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ForkSeq } from "@lodestar/params";
|
|
1
2
|
import { EpochTransitionCache, CachedBeaconStateAllForks } from "../types.js";
|
|
2
3
|
/**
|
|
3
4
|
* Update validator registry for validators that activate + exit
|
|
@@ -13,5 +14,5 @@ import { EpochTransitionCache, CachedBeaconStateAllForks } from "../types.js";
|
|
|
13
14
|
* - indicesEligibleForActivationQueue: 0
|
|
14
15
|
* - indicesToEject: 0
|
|
15
16
|
*/
|
|
16
|
-
export declare function processRegistryUpdates(state: CachedBeaconStateAllForks, cache: EpochTransitionCache): void;
|
|
17
|
+
export declare function processRegistryUpdates(fork: ForkSeq, state: CachedBeaconStateAllForks, cache: EpochTransitionCache): void;
|
|
17
18
|
//# sourceMappingURL=processRegistryUpdates.d.ts.map
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ForkSeq } from "@lodestar/params";
|
|
1
2
|
import { computeActivationExitEpoch } from "../util/index.js";
|
|
2
3
|
import { initiateValidatorExit } from "../block/index.js";
|
|
3
4
|
/**
|
|
@@ -14,7 +15,7 @@ import { initiateValidatorExit } from "../block/index.js";
|
|
|
14
15
|
* - indicesEligibleForActivationQueue: 0
|
|
15
16
|
* - indicesToEject: 0
|
|
16
17
|
*/
|
|
17
|
-
export function processRegistryUpdates(state, cache) {
|
|
18
|
+
export function processRegistryUpdates(fork, state, cache) {
|
|
18
19
|
const { epochCtx } = state;
|
|
19
20
|
// Get the validators sub tree once for all the loop
|
|
20
21
|
const validators = state.validators;
|
|
@@ -23,7 +24,7 @@ export function processRegistryUpdates(state, cache) {
|
|
|
23
24
|
for (const index of cache.indicesToEject) {
|
|
24
25
|
// set validator exit epoch and withdrawable epoch
|
|
25
26
|
// TODO: Figure out a way to quickly set properties on the validators tree
|
|
26
|
-
initiateValidatorExit(state, validators.get(index));
|
|
27
|
+
initiateValidatorExit(fork, state, validators.get(index));
|
|
27
28
|
}
|
|
28
29
|
// set new activation eligibilities
|
|
29
30
|
for (const index of cache.indicesEligibleForActivationQueue) {
|
|
@@ -31,7 +32,9 @@ export function processRegistryUpdates(state, cache) {
|
|
|
31
32
|
}
|
|
32
33
|
const finalityEpoch = state.finalizedCheckpoint.epoch;
|
|
33
34
|
// this avoids an array allocation compared to `slice(0, epochCtx.activationChurnLimit)`
|
|
34
|
-
const len =
|
|
35
|
+
const len = fork < ForkSeq.electra
|
|
36
|
+
? Math.min(cache.indicesEligibleForActivation.length, epochCtx.activationChurnLimit)
|
|
37
|
+
: cache.indicesEligibleForActivation.length;
|
|
35
38
|
const activationEpoch = computeActivationExitEpoch(cache.currentEpoch);
|
|
36
39
|
// dequeue validators for activation up to churn limit
|
|
37
40
|
for (let i = 0; i < len; i++) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processRegistryUpdates.js","sourceRoot":"","sources":["../../src/epoch/processRegistryUpdates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,0BAA0B,EAAC,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAC,qBAAqB,EAAC,MAAM,mBAAmB,CAAC;AAGxD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,sBAAsB,
|
|
1
|
+
{"version":3,"file":"processRegistryUpdates.js","sourceRoot":"","sources":["../../src/epoch/processRegistryUpdates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAC,0BAA0B,EAAC,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAC,qBAAqB,EAAC,MAAM,mBAAmB,CAAC;AAGxD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAa,EACb,KAAgC,EAChC,KAA2B;IAE3B,MAAM,EAAC,QAAQ,EAAC,GAAG,KAAK,CAAC;IAEzB,oDAAoD;IACpD,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IAEpC,mFAAmF;IAEnF,oBAAoB;IACpB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QACzC,kDAAkD;QAClD,0EAA0E;QAC1E,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,mCAAmC;IACnC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,iCAAiC,EAAE,CAAC;QAC5D,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,0BAA0B,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,aAAa,GAAG,KAAK,CAAC,mBAAmB,CAAC,KAAK,CAAC;IACtD,wFAAwF;IACxF,MAAM,GAAG,GACP,IAAI,GAAG,OAAO,CAAC,OAAO;QACpB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,4BAA4B,CAAC,MAAM,EAAE,QAAQ,CAAC,oBAAoB,CAAC;QACpF,CAAC,CAAC,KAAK,CAAC,4BAA4B,CAAC,MAAM,CAAC;IAChD,MAAM,eAAe,GAAG,0BAA0B,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACvE,sDAAsD;IACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,cAAc,GAAG,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACjD,kCAAkC;QAClC,IAAI,SAAS,CAAC,0BAA0B,GAAG,aAAa,EAAE,CAAC;YACzD,iGAAiG;YACjG,kFAAkF;YAClF,iHAAiH;YACjH,sEAAsE;YACtE,MAAM;QACR,CAAC;QACD,SAAS,CAAC,eAAe,GAAG,eAAe,CAAC;IAC9C,CAAC;AACH,CAAC"}
|
|
@@ -15,7 +15,8 @@ export function processRewardsAndPenalties(state, cache, slashingPenalties = [])
|
|
|
15
15
|
const [rewards, penalties] = getRewardsAndPenalties(state, cache);
|
|
16
16
|
const balances = state.balances.getAll();
|
|
17
17
|
for (let i = 0, len = rewards.length; i < len; i++) {
|
|
18
|
-
balances[i]
|
|
18
|
+
const result = balances[i] + rewards[i] - penalties[i] - (slashingPenalties[i] ?? 0);
|
|
19
|
+
balances[i] = Math.max(result, 0);
|
|
19
20
|
}
|
|
20
21
|
// important: do not change state one balance at a time. Set them all at once, constructing the tree in one go
|
|
21
22
|
// cache the balances array, too
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processRewardsAndPenalties.js","sourceRoot":"","sources":["../../src/epoch/processRewardsAndPenalties.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,aAAa,EAAC,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAC,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAOpC,OAAO,EAAC,oBAAoB,EAAC,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAC,4BAA4B,EAAC,MAAM,6BAA6B,CAAC;AAEzE;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CACxC,KAAgC,EAChC,KAA2B,EAC3B,oBAA8B,EAAE;IAEhC,+GAA+G;IAC/G,IAAI,KAAK,CAAC,YAAY,KAAK,aAAa,EAAE,CAAC;QACzC,OAAO;IACT,CAAC;IAED,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACnD,QAAQ,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"processRewardsAndPenalties.js","sourceRoot":"","sources":["../../src/epoch/processRewardsAndPenalties.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,aAAa,EAAC,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAC,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAOpC,OAAO,EAAC,oBAAoB,EAAC,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAC,4BAA4B,EAAC,MAAM,6BAA6B,CAAC;AAEzE;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CACxC,KAAgC,EAChC,KAA2B,EAC3B,oBAA8B,EAAE;IAEhC,+GAA+G;IAC/G,IAAI,KAAK,CAAC,YAAY,KAAK,aAAa,EAAE,CAAC;QACzC,OAAO;IACT,CAAC;IAED,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACrF,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,8GAA8G;IAC9G,gCAAgC;IAChC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAExD,2FAA2F;IAC3F,wBAAwB;IACxB,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC5B,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,sBAAsB,CACpC,KAAgC,EAChC,oBAA0C;IAE1C,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjD,OAAO,IAAI,KAAK,OAAO,CAAC,MAAM;QAC5B,CAAC,CAAC,oBAAoB,CAAC,KAAgC,EAAE,oBAAoB,CAAC;QAC9E,CAAC,CAAC,4BAA4B,CAAC,KAAgC,EAAE,oBAAoB,CAAC,CAAC;AAC3F,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ForkSeq } from "@lodestar/params";
|
|
1
2
|
import { CachedBeaconStateAltair } from "../types.js";
|
|
2
3
|
/**
|
|
3
4
|
* Rotate nextSyncCommittee to currentSyncCommittee if sync committee period is over.
|
|
@@ -5,5 +6,5 @@ import { CachedBeaconStateAltair } from "../types.js";
|
|
|
5
6
|
* PERF: Once every `EPOCHS_PER_SYNC_COMMITTEE_PERIOD`, do an expensive operation to compute the next committee.
|
|
6
7
|
* Calculating the next sync committee has a proportional cost to $VALIDATOR_COUNT
|
|
7
8
|
*/
|
|
8
|
-
export declare function processSyncCommitteeUpdates(state: CachedBeaconStateAltair): void;
|
|
9
|
+
export declare function processSyncCommitteeUpdates(fork: ForkSeq, state: CachedBeaconStateAltair): void;
|
|
9
10
|
//# sourceMappingURL=processSyncCommitteeUpdates.d.ts.map
|
|
@@ -8,14 +8,15 @@ import { getNextSyncCommitteeIndices } from "../util/seed.js";
|
|
|
8
8
|
* PERF: Once every `EPOCHS_PER_SYNC_COMMITTEE_PERIOD`, do an expensive operation to compute the next committee.
|
|
9
9
|
* Calculating the next sync committee has a proportional cost to $VALIDATOR_COUNT
|
|
10
10
|
*/
|
|
11
|
-
export function processSyncCommitteeUpdates(state) {
|
|
11
|
+
export function processSyncCommitteeUpdates(fork, state) {
|
|
12
12
|
const nextEpoch = state.epochCtx.epoch + 1;
|
|
13
13
|
if (nextEpoch % EPOCHS_PER_SYNC_COMMITTEE_PERIOD === 0) {
|
|
14
14
|
const activeValidatorIndices = state.epochCtx.nextShuffling.activeIndices;
|
|
15
15
|
const { effectiveBalanceIncrements } = state.epochCtx;
|
|
16
|
-
const nextSyncCommitteeIndices = getNextSyncCommitteeIndices(state, activeValidatorIndices, effectiveBalanceIncrements);
|
|
16
|
+
const nextSyncCommitteeIndices = getNextSyncCommitteeIndices(fork, state, activeValidatorIndices, effectiveBalanceIncrements);
|
|
17
|
+
const validators = state.validators;
|
|
17
18
|
// Using the index2pubkey cache is slower because it needs the serialized pubkey.
|
|
18
|
-
const nextSyncCommitteePubkeys = nextSyncCommitteeIndices.map((index) =>
|
|
19
|
+
const nextSyncCommitteePubkeys = nextSyncCommitteeIndices.map((index) => validators.getReadonly(index).pubkey);
|
|
19
20
|
// Rotate syncCommittee in state
|
|
20
21
|
state.currentSyncCommittee = state.nextSyncCommittee;
|
|
21
22
|
state.nextSyncCommittee = ssz.altair.SyncCommittee.toViewDU({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processSyncCommitteeUpdates.js","sourceRoot":"","sources":["../../src/epoch/processSyncCommitteeUpdates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,6BAA6B,EAAC,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAC,gCAAgC,
|
|
1
|
+
{"version":3,"file":"processSyncCommitteeUpdates.js","sourceRoot":"","sources":["../../src/epoch/processSyncCommitteeUpdates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,6BAA6B,EAAC,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAC,gCAAgC,EAAU,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAC,GAAG,EAAC,MAAM,iBAAiB,CAAC;AACpC,OAAO,EAAC,2BAA2B,EAAC,MAAM,iBAAiB,CAAC;AAG5D;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAAa,EAAE,KAA8B;IACvF,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;IAE3C,IAAI,SAAS,GAAG,gCAAgC,KAAK,CAAC,EAAE,CAAC;QACvD,MAAM,sBAAsB,GAAG,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC;QAC1E,MAAM,EAAC,0BAA0B,EAAC,GAAG,KAAK,CAAC,QAAQ,CAAC;QAEpD,MAAM,wBAAwB,GAAG,2BAA2B,CAC1D,IAAI,EACJ,KAAK,EACL,sBAAsB,EACtB,0BAA0B,CAC3B,CAAC;QACF,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QAEpC,iFAAiF;QACjF,MAAM,wBAAwB,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;QAE/G,gCAAgC;QAChC,KAAK,CAAC,oBAAoB,GAAG,KAAK,CAAC,iBAAiB,CAAC;QACrD,KAAK,CAAC,iBAAiB,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC;YAC1D,OAAO,EAAE,wBAAwB;YACjC,eAAe,EAAE,6BAA6B,CAAC,wBAAwB,CAAC,CAAC,OAAO,EAAE;SACnF,CAAC,CAAC;QAEH,6BAA6B;QAC7B,KAAK,CAAC,QAAQ,CAAC,0BAA0B,CAAC,wBAAwB,CAAC,CAAC;IACtE,CAAC;AACH,CAAC"}
|
package/lib/index.d.ts
CHANGED
|
@@ -4,11 +4,11 @@ export * from "./util/index.js";
|
|
|
4
4
|
export * from "./signatureSets/index.js";
|
|
5
5
|
export type { EpochTransitionStep } from "./epoch/index.js";
|
|
6
6
|
export type { BeaconStateTransitionMetrics } from "./metrics.js";
|
|
7
|
-
export type { CachedBeaconStatePhase0, CachedBeaconStateAltair, CachedBeaconStateBellatrix, CachedBeaconStateCapella, CachedBeaconStateDeneb, CachedBeaconStateAllForks, CachedBeaconStateExecutions, BeaconStatePhase0, BeaconStateAltair, BeaconStateBellatrix, BeaconStateCapella, BeaconStateDeneb, BeaconStateAllForks, BeaconStateExecutions, } from "./types.js";
|
|
7
|
+
export type { CachedBeaconStatePhase0, CachedBeaconStateAltair, CachedBeaconStateBellatrix, CachedBeaconStateCapella, CachedBeaconStateDeneb, CachedBeaconStateElectra, CachedBeaconStateAllForks, CachedBeaconStateExecutions, BeaconStatePhase0, BeaconStateAltair, BeaconStateBellatrix, BeaconStateCapella, BeaconStateDeneb, BeaconStateElectra, BeaconStateAllForks, BeaconStateExecutions, } from "./types.js";
|
|
8
8
|
export { createCachedBeaconState, loadCachedBeaconState, type BeaconStateCache, isCachedBeaconState, isStateBalancesNodesPopulated, isStateValidatorsNodesPopulated, } from "./cache/stateCache.js";
|
|
9
9
|
export { EpochCache, type EpochCacheImmutableData, createEmptyEpochCacheImmutableData, EpochCacheError, EpochCacheErrorCode, } from "./cache/epochCache.js";
|
|
10
10
|
export { type EpochTransitionCache, beforeProcessEpoch } from "./cache/epochTransitionCache.js";
|
|
11
|
-
export { PubkeyIndexMap, type Index2PubkeyCache } from "./cache/pubkeyCache.js";
|
|
11
|
+
export { PubkeyIndexMap, type Index2PubkeyCache, type UnfinalizedPubkeyIndexMap, newUnfinalizedPubkeyIndexMap, } from "./cache/pubkeyCache.js";
|
|
12
12
|
export { type EffectiveBalanceIncrements, getEffectiveBalanceIncrementsZeroed, getEffectiveBalanceIncrementsWithLen, } from "./cache/effectiveBalanceIncrements.js";
|
|
13
13
|
export { isValidVoluntaryExit } from "./block/processVoluntaryExit.js";
|
|
14
14
|
export { isValidBlsToExecutionChange } from "./block/processBlsToExecutionChange.js";
|