@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.
Files changed (146) hide show
  1. package/LICENSE +201 -165
  2. package/lib/block/index.js +1 -1
  3. package/lib/block/index.js.map +1 -1
  4. package/lib/block/initiateValidatorExit.d.ts +2 -1
  5. package/lib/block/initiateValidatorExit.js +21 -13
  6. package/lib/block/initiateValidatorExit.js.map +1 -1
  7. package/lib/block/isValidIndexedAttestation.js +5 -2
  8. package/lib/block/isValidIndexedAttestation.js.map +1 -1
  9. package/lib/block/processAttestationPhase0.d.ts +2 -2
  10. package/lib/block/processAttestationPhase0.js +33 -11
  11. package/lib/block/processAttestationPhase0.js.map +1 -1
  12. package/lib/block/processAttestations.d.ts +2 -2
  13. package/lib/block/processAttestations.js.map +1 -1
  14. package/lib/block/processAttestationsAltair.d.ts +2 -2
  15. package/lib/block/processAttestationsAltair.js +3 -3
  16. package/lib/block/processAttestationsAltair.js.map +1 -1
  17. package/lib/block/processBlockHeader.js +3 -2
  18. package/lib/block/processBlockHeader.js.map +1 -1
  19. package/lib/block/processBlsToExecutionChange.js +3 -2
  20. package/lib/block/processBlsToExecutionChange.js.map +1 -1
  21. package/lib/block/processConsolidationRequest.d.ts +4 -0
  22. package/lib/block/processConsolidationRequest.js +55 -0
  23. package/lib/block/processConsolidationRequest.js.map +1 -0
  24. package/lib/block/processDeposit.d.ts +8 -0
  25. package/lib/block/processDeposit.js +94 -54
  26. package/lib/block/processDeposit.js.map +1 -1
  27. package/lib/block/processDepositRequest.d.ts +5 -0
  28. package/lib/block/processDepositRequest.js +9 -0
  29. package/lib/block/processDepositRequest.js.map +1 -0
  30. package/lib/block/processExecutionPayload.js +4 -3
  31. package/lib/block/processExecutionPayload.js.map +1 -1
  32. package/lib/block/processOperations.d.ts +4 -1
  33. package/lib/block/processOperations.js +21 -4
  34. package/lib/block/processOperations.js.map +1 -1
  35. package/lib/block/processVoluntaryExit.d.ts +2 -1
  36. package/lib/block/processVoluntaryExit.js +16 -6
  37. package/lib/block/processVoluntaryExit.js.map +1 -1
  38. package/lib/block/processWithdrawalRequest.d.ts +5 -0
  39. package/lib/block/processWithdrawalRequest.js +67 -0
  40. package/lib/block/processWithdrawalRequest.js.map +1 -0
  41. package/lib/block/processWithdrawals.d.ts +5 -3
  42. package/lib/block/processWithdrawals.js +70 -17
  43. package/lib/block/processWithdrawals.js.map +1 -1
  44. package/lib/block/slashValidator.js +9 -5
  45. package/lib/block/slashValidator.js.map +1 -1
  46. package/lib/cache/effectiveBalanceIncrements.d.ts +3 -4
  47. package/lib/cache/effectiveBalanceIncrements.js +5 -5
  48. package/lib/cache/effectiveBalanceIncrements.js.map +1 -1
  49. package/lib/cache/epochCache.d.ts +66 -8
  50. package/lib/cache/epochCache.js +185 -22
  51. package/lib/cache/epochCache.js.map +1 -1
  52. package/lib/cache/epochTransitionCache.d.ts +12 -2
  53. package/lib/cache/epochTransitionCache.js +6 -3
  54. package/lib/cache/epochTransitionCache.js.map +1 -1
  55. package/lib/cache/pubkeyCache.d.ts +23 -3
  56. package/lib/cache/pubkeyCache.js +8 -1
  57. package/lib/cache/pubkeyCache.js.map +1 -1
  58. package/lib/cache/stateCache.d.ts +4 -2
  59. package/lib/cache/stateCache.js +2 -1
  60. package/lib/cache/stateCache.js.map +1 -1
  61. package/lib/cache/syncCommitteeCache.js +2 -2
  62. package/lib/cache/syncCommitteeCache.js.map +1 -1
  63. package/lib/cache/types.d.ts +1 -0
  64. package/lib/epoch/index.d.ts +6 -2
  65. package/lib/epoch/index.js +27 -5
  66. package/lib/epoch/index.js.map +1 -1
  67. package/lib/epoch/processEffectiveBalanceUpdates.d.ts +4 -1
  68. package/lib/epoch/processEffectiveBalanceUpdates.js +25 -6
  69. package/lib/epoch/processEffectiveBalanceUpdates.js.map +1 -1
  70. package/lib/epoch/processPendingBalanceDeposits.d.ts +12 -0
  71. package/lib/epoch/processPendingBalanceDeposits.js +68 -0
  72. package/lib/epoch/processPendingBalanceDeposits.js.map +1 -0
  73. package/lib/epoch/processPendingConsolidations.d.ts +16 -0
  74. package/lib/epoch/processPendingConsolidations.js +49 -0
  75. package/lib/epoch/processPendingConsolidations.js.map +1 -0
  76. package/lib/epoch/processRegistryUpdates.d.ts +2 -1
  77. package/lib/epoch/processRegistryUpdates.js +6 -3
  78. package/lib/epoch/processRegistryUpdates.js.map +1 -1
  79. package/lib/epoch/processRewardsAndPenalties.js +2 -1
  80. package/lib/epoch/processRewardsAndPenalties.js.map +1 -1
  81. package/lib/epoch/processSyncCommitteeUpdates.d.ts +2 -1
  82. package/lib/epoch/processSyncCommitteeUpdates.js +4 -3
  83. package/lib/epoch/processSyncCommitteeUpdates.js.map +1 -1
  84. package/lib/index.d.ts +2 -2
  85. package/lib/index.js +1 -1
  86. package/lib/index.js.map +1 -1
  87. package/lib/metrics.d.ts +5 -0
  88. package/lib/metrics.js.map +1 -1
  89. package/lib/signatureSets/attesterSlashings.d.ts +3 -3
  90. package/lib/signatureSets/attesterSlashings.js +1 -2
  91. package/lib/signatureSets/attesterSlashings.js.map +1 -1
  92. package/lib/signatureSets/index.js +2 -2
  93. package/lib/signatureSets/index.js.map +1 -1
  94. package/lib/signatureSets/indexedAttestation.js +2 -1
  95. package/lib/signatureSets/indexedAttestation.js.map +1 -1
  96. package/lib/slot/index.d.ts +1 -0
  97. package/lib/slot/index.js +1 -0
  98. package/lib/slot/index.js.map +1 -1
  99. package/lib/slot/upgradeStateToAltair.js +1 -1
  100. package/lib/slot/upgradeStateToAltair.js.map +1 -1
  101. package/lib/slot/upgradeStateToElectra.d.ts +8 -0
  102. package/lib/slot/upgradeStateToElectra.js +138 -0
  103. package/lib/slot/upgradeStateToElectra.js.map +1 -0
  104. package/lib/stateTransition.d.ts +1 -0
  105. package/lib/stateTransition.js +12 -8
  106. package/lib/stateTransition.js.map +1 -1
  107. package/lib/types.d.ts +2 -2
  108. package/lib/util/balance.js +2 -2
  109. package/lib/util/balance.js.map +1 -1
  110. package/lib/util/deposit.d.ts +4 -0
  111. package/lib/util/deposit.js +22 -0
  112. package/lib/util/deposit.js.map +1 -0
  113. package/lib/util/electra.d.ts +8 -0
  114. package/lib/util/electra.js +47 -0
  115. package/lib/util/electra.js.map +1 -0
  116. package/lib/util/epoch.d.ts +4 -1
  117. package/lib/util/epoch.js +37 -0
  118. package/lib/util/epoch.js.map +1 -1
  119. package/lib/util/epochShuffling.js +2 -3
  120. package/lib/util/epochShuffling.js.map +1 -1
  121. package/lib/util/execution.js +8 -0
  122. package/lib/util/execution.js.map +1 -1
  123. package/lib/util/genesis.d.ts +1 -1
  124. package/lib/util/genesis.js +30 -9
  125. package/lib/util/genesis.js.map +1 -1
  126. package/lib/util/index.d.ts +3 -0
  127. package/lib/util/index.js +3 -0
  128. package/lib/util/index.js.map +1 -1
  129. package/lib/util/loadState/index.d.ts +1 -1
  130. package/lib/util/loadState/index.js +1 -1
  131. package/lib/util/loadState/index.js.map +1 -1
  132. package/lib/util/loadState/loadState.d.ts +7 -0
  133. package/lib/util/loadState/loadState.js +15 -0
  134. package/lib/util/loadState/loadState.js.map +1 -1
  135. package/lib/util/seed.d.ts +4 -3
  136. package/lib/util/seed.js +11 -10
  137. package/lib/util/seed.js.map +1 -1
  138. package/lib/util/syncCommittee.d.ts +2 -1
  139. package/lib/util/syncCommittee.js +2 -2
  140. package/lib/util/syncCommittee.js.map +1 -1
  141. package/lib/util/validator.d.ts +10 -1
  142. package/lib/util/validator.js +35 -1
  143. package/lib/util/validator.js.map +1 -1
  144. package/lib/util/weakSubjectivity.js +2 -2
  145. package/lib/util/weakSubjectivity.js.map +1 -1
  146. package/package.json +9 -8
@@ -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 EIP-6110
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":"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"}
1
+ {"version":3,"file":"stateCache.js","sourceRoot":"","sources":["../../src/cache/stateCache.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { toHexString } from "@chainsafe/ssz";
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 ${toHexString(pubkey)}`);
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":"AAAA,OAAO,EAAkB,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAmB5D,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"}
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"}
@@ -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;
@@ -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
@@ -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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/epoch/index.ts"],"names":[],"mappings":"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"}
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): void;
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 set in processRewardsAndPenalties(), so it's recycled here for performance.
24
- // It defaults to `state.balances.getAll()` to make Typescript happy and for spec tests
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 < MAX_EFFECTIVE_BALANCE && effectiveBalance < balance - UPWARD_THRESHOLD)) {
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":"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"}
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 = Math.min(cache.indicesEligibleForActivation.length, epochCtx.activationChurnLimit);
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,CAAC,KAAgC,EAAE,KAA2B;IAClG,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,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IACtD,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,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,4BAA4B,CAAC,MAAM,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IAC/F,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"}
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] += rewards[i] - penalties[i] - (slashingPenalties[i] ?? 0);
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,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,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
+ {"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) => state.validators.getReadonly(index).pubkey);
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,EAAC,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAC,GAAG,EAAC,MAAM,iBAAiB,CAAC;AACpC,OAAO,EAAC,2BAA2B,EAAC,MAAM,iBAAiB,CAAC;AAG5D;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CAAC,KAA8B;IACxE,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,KAAK,EACL,sBAAsB,EACtB,0BAA0B,CAC3B,CAAC;QAEF,iFAAiF;QACjF,MAAM,wBAAwB,GAAG,wBAAwB,CAAC,GAAG,CAC3D,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,MAAM,CACtD,CAAC;QAEF,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"}
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";