@lodestar/state-transition 1.22.0-dev.6f470f8a35 → 1.22.0-dev.a7286bd669

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 (127) 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 +32 -10
  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/processConsolidationRequest.d.ts +4 -0
  18. package/lib/block/processConsolidationRequest.js +55 -0
  19. package/lib/block/processConsolidationRequest.js.map +1 -0
  20. package/lib/block/processDeposit.d.ts +8 -0
  21. package/lib/block/processDeposit.js +94 -54
  22. package/lib/block/processDeposit.js.map +1 -1
  23. package/lib/block/processDepositRequest.d.ts +5 -0
  24. package/lib/block/processDepositRequest.js +9 -0
  25. package/lib/block/processDepositRequest.js.map +1 -0
  26. package/lib/block/processOperations.d.ts +4 -1
  27. package/lib/block/processOperations.js +21 -4
  28. package/lib/block/processOperations.js.map +1 -1
  29. package/lib/block/processVoluntaryExit.d.ts +2 -1
  30. package/lib/block/processVoluntaryExit.js +16 -6
  31. package/lib/block/processVoluntaryExit.js.map +1 -1
  32. package/lib/block/processWithdrawalRequest.d.ts +5 -0
  33. package/lib/block/processWithdrawalRequest.js +67 -0
  34. package/lib/block/processWithdrawalRequest.js.map +1 -0
  35. package/lib/block/processWithdrawals.d.ts +5 -3
  36. package/lib/block/processWithdrawals.js +43 -15
  37. package/lib/block/processWithdrawals.js.map +1 -1
  38. package/lib/block/slashValidator.js +9 -5
  39. package/lib/block/slashValidator.js.map +1 -1
  40. package/lib/cache/effectiveBalanceIncrements.d.ts +3 -4
  41. package/lib/cache/effectiveBalanceIncrements.js +5 -5
  42. package/lib/cache/effectiveBalanceIncrements.js.map +1 -1
  43. package/lib/cache/epochCache.d.ts +66 -8
  44. package/lib/cache/epochCache.js +185 -22
  45. package/lib/cache/epochCache.js.map +1 -1
  46. package/lib/cache/epochTransitionCache.d.ts +12 -2
  47. package/lib/cache/epochTransitionCache.js +6 -3
  48. package/lib/cache/epochTransitionCache.js.map +1 -1
  49. package/lib/cache/pubkeyCache.d.ts +23 -3
  50. package/lib/cache/pubkeyCache.js +8 -1
  51. package/lib/cache/pubkeyCache.js.map +1 -1
  52. package/lib/cache/stateCache.d.ts +4 -2
  53. package/lib/cache/stateCache.js +2 -1
  54. package/lib/cache/stateCache.js.map +1 -1
  55. package/lib/cache/types.d.ts +1 -0
  56. package/lib/epoch/index.d.ts +6 -2
  57. package/lib/epoch/index.js +27 -5
  58. package/lib/epoch/index.js.map +1 -1
  59. package/lib/epoch/processEffectiveBalanceUpdates.d.ts +4 -1
  60. package/lib/epoch/processEffectiveBalanceUpdates.js +25 -6
  61. package/lib/epoch/processEffectiveBalanceUpdates.js.map +1 -1
  62. package/lib/epoch/processPendingBalanceDeposits.d.ts +12 -0
  63. package/lib/epoch/processPendingBalanceDeposits.js +68 -0
  64. package/lib/epoch/processPendingBalanceDeposits.js.map +1 -0
  65. package/lib/epoch/processPendingConsolidations.d.ts +16 -0
  66. package/lib/epoch/processPendingConsolidations.js +49 -0
  67. package/lib/epoch/processPendingConsolidations.js.map +1 -0
  68. package/lib/epoch/processRegistryUpdates.d.ts +2 -1
  69. package/lib/epoch/processRegistryUpdates.js +6 -3
  70. package/lib/epoch/processRegistryUpdates.js.map +1 -1
  71. package/lib/epoch/processRewardsAndPenalties.js +2 -1
  72. package/lib/epoch/processRewardsAndPenalties.js.map +1 -1
  73. package/lib/epoch/processSyncCommitteeUpdates.d.ts +2 -1
  74. package/lib/epoch/processSyncCommitteeUpdates.js +4 -3
  75. package/lib/epoch/processSyncCommitteeUpdates.js.map +1 -1
  76. package/lib/index.d.ts +2 -2
  77. package/lib/index.js +1 -1
  78. package/lib/index.js.map +1 -1
  79. package/lib/metrics.d.ts +5 -0
  80. package/lib/metrics.js.map +1 -1
  81. package/lib/signatureSets/attesterSlashings.d.ts +3 -3
  82. package/lib/signatureSets/attesterSlashings.js +1 -2
  83. package/lib/signatureSets/attesterSlashings.js.map +1 -1
  84. package/lib/signatureSets/index.js +2 -2
  85. package/lib/signatureSets/index.js.map +1 -1
  86. package/lib/signatureSets/indexedAttestation.js +2 -1
  87. package/lib/signatureSets/indexedAttestation.js.map +1 -1
  88. package/lib/slot/index.d.ts +1 -0
  89. package/lib/slot/index.js +1 -0
  90. package/lib/slot/index.js.map +1 -1
  91. package/lib/slot/upgradeStateToAltair.js +1 -1
  92. package/lib/slot/upgradeStateToAltair.js.map +1 -1
  93. package/lib/slot/upgradeStateToElectra.d.ts +8 -0
  94. package/lib/slot/upgradeStateToElectra.js +138 -0
  95. package/lib/slot/upgradeStateToElectra.js.map +1 -0
  96. package/lib/stateTransition.js +9 -6
  97. package/lib/stateTransition.js.map +1 -1
  98. package/lib/types.d.ts +2 -2
  99. package/lib/util/balance.js +2 -2
  100. package/lib/util/balance.js.map +1 -1
  101. package/lib/util/deposit.d.ts +4 -0
  102. package/lib/util/deposit.js +22 -0
  103. package/lib/util/deposit.js.map +1 -0
  104. package/lib/util/electra.d.ts +13 -0
  105. package/lib/util/electra.js +71 -0
  106. package/lib/util/electra.js.map +1 -0
  107. package/lib/util/epoch.d.ts +4 -1
  108. package/lib/util/epoch.js +37 -0
  109. package/lib/util/epoch.js.map +1 -1
  110. package/lib/util/execution.js +8 -0
  111. package/lib/util/execution.js.map +1 -1
  112. package/lib/util/genesis.d.ts +1 -1
  113. package/lib/util/genesis.js +30 -9
  114. package/lib/util/genesis.js.map +1 -1
  115. package/lib/util/index.d.ts +2 -0
  116. package/lib/util/index.js +2 -0
  117. package/lib/util/index.js.map +1 -1
  118. package/lib/util/seed.d.ts +4 -3
  119. package/lib/util/seed.js +11 -10
  120. package/lib/util/seed.js.map +1 -1
  121. package/lib/util/syncCommittee.d.ts +2 -1
  122. package/lib/util/syncCommittee.js +2 -2
  123. package/lib/util/syncCommittee.js.map +1 -1
  124. package/lib/util/validator.d.ts +10 -1
  125. package/lib/util/validator.js +35 -1
  126. package/lib/util/validator.js.map +1 -1
  127. package/package.json +9 -8
@@ -1 +1 @@
1
- {"version":3,"file":"processAttestationPhase0.js","sourceRoot":"","sources":["../../src/block/processAttestationPhase0.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"processAttestationPhase0.js","sourceRoot":"","sources":["../../src/block/processAttestationPhase0.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import { phase0 } from "@lodestar/types";
1
+ import { Attestation } from "@lodestar/types";
2
2
  import { ForkSeq } from "@lodestar/params";
3
3
  import { CachedBeaconStateAllForks } from "../types.js";
4
4
  /**
5
5
  * TODO
6
6
  */
7
- export declare function processAttestations(fork: ForkSeq, state: CachedBeaconStateAllForks, attestations: phase0.Attestation[], verifySignatures?: boolean): void;
7
+ export declare function processAttestations(fork: ForkSeq, state: CachedBeaconStateAllForks, attestations: Attestation[], verifySignatures?: boolean): void;
8
8
  //# sourceMappingURL=processAttestations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"processAttestations.js","sourceRoot":"","sources":["../../src/block/processAttestations.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAC,wBAAwB,EAAC,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAC,yBAAyB,EAAC,MAAM,gCAAgC,CAAC;AAEzE;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAa,EACb,KAAgC,EAChC,YAAkC,EAClC,gBAAgB,GAAG,IAAI;IAEvB,IAAI,IAAI,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;QAC5B,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;YACvC,wBAAwB,CAAC,KAAgC,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;SAAM,CAAC;QACN,yBAAyB,CAAC,IAAI,EAAE,KAAgC,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;IACpG,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"processAttestations.js","sourceRoot":"","sources":["../../src/block/processAttestations.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAC,wBAAwB,EAAC,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAC,yBAAyB,EAAC,MAAM,gCAAgC,CAAC;AAEzE;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAa,EACb,KAAgC,EAChC,YAA2B,EAC3B,gBAAgB,GAAG,IAAI;IAEvB,IAAI,IAAI,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;QAC5B,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;YACvC,wBAAwB,CAAC,KAAgC,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;SAAM,CAAC;QACN,yBAAyB,CAAC,IAAI,EAAE,KAAgC,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;IACpG,CAAC;AACH,CAAC"}
@@ -1,8 +1,8 @@
1
- import { Epoch, phase0 } from "@lodestar/types";
1
+ import { Epoch, Attestation, phase0 } from "@lodestar/types";
2
2
  import { ForkSeq } from "@lodestar/params";
3
3
  import { CachedBeaconStateAltair } from "../types.js";
4
4
  import { RootCache } from "../util/rootCache.js";
5
- export declare function processAttestationsAltair(fork: ForkSeq, state: CachedBeaconStateAltair, attestations: phase0.Attestation[], verifySignature?: boolean): void;
5
+ export declare function processAttestationsAltair(fork: ForkSeq, state: CachedBeaconStateAltair, attestations: Attestation[], verifySignature?: boolean): void;
6
6
  /**
7
7
  * https://github.com/ethereum/consensus-specs/blob/v1.1.10/specs/altair/beacon-chain.md#get_attestation_participation_flag_indices
8
8
  */
@@ -23,8 +23,7 @@ export function processAttestationsAltair(fork, state, attestations, verifySigna
23
23
  const data = attestation.data;
24
24
  validateAttestation(fork, state, attestation);
25
25
  // Retrieve the validator indices from the attestation participation bitfield
26
- const committeeIndices = epochCtx.getBeaconCommittee(data.slot, data.index);
27
- const attestingIndices = attestation.aggregationBits.intersectValues(committeeIndices);
26
+ const attestingIndices = epochCtx.getAttestingIndices(fork, attestation);
28
27
  // this check is done last because its the most expensive (if signature verification is toggled on)
29
28
  // TODO: Why should we verify an indexed attestation that we just created? If it's just for the signature
30
29
  // we can verify only that and nothing else.
@@ -40,6 +39,7 @@ export function processAttestationsAltair(fork, state, attestations, verifySigna
40
39
  // For each participant, update their participation
41
40
  // In epoch processing, this participation info is used to calculate balance updates
42
41
  let totalBalanceIncrementsWithWeight = 0;
42
+ const validators = state.validators;
43
43
  for (const index of attestingIndices) {
44
44
  const flags = epochParticipation.get(index);
45
45
  // For normal block, > 90% of attestations belong to current epoch
@@ -66,7 +66,7 @@ export function processAttestationsAltair(fork, state, attestations, verifySigna
66
66
  // TODO: describe issue. Compute progressive target balances
67
67
  // When processing each attestation, increase the cummulative target balance. Only applies post-altair
68
68
  if ((flagsNewSet & TIMELY_TARGET) === TIMELY_TARGET) {
69
- const validator = state.validators.getReadonly(index);
69
+ const validator = validators.getReadonly(index);
70
70
  if (!validator.slashed) {
71
71
  if (inCurrentEpoch) {
72
72
  epochCtx.currentTargetUnslashedBalanceIncrements += effectiveBalanceIncrements[index];
@@ -1 +1 @@
1
- {"version":3,"file":"processAttestationsAltair.js","sourceRoot":"","sources":["../../src/block/processAttestationsAltair.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"processAttestationsAltair.js","sourceRoot":"","sources":["../../src/block/processAttestationsAltair.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { electra } from "@lodestar/types";
2
+ import { CachedBeaconStateElectra } from "../types.js";
3
+ export declare function processConsolidationRequest(state: CachedBeaconStateElectra, consolidationRequest: electra.ConsolidationRequest): void;
4
+ //# sourceMappingURL=processConsolidationRequest.d.ts.map
@@ -0,0 +1,55 @@
1
+ import { ssz } from "@lodestar/types";
2
+ import { FAR_FUTURE_EPOCH, MIN_ACTIVATION_BALANCE, PENDING_CONSOLIDATIONS_LIMIT } from "@lodestar/params";
3
+ import { getConsolidationChurnLimit, isActiveValidator } from "../util/validator.js";
4
+ import { hasExecutionWithdrawalCredential } from "../util/electra.js";
5
+ import { computeConsolidationEpochAndUpdateChurn } from "../util/epoch.js";
6
+ export function processConsolidationRequest(state, consolidationRequest) {
7
+ // If the pending consolidations queue is full, consolidation requests are ignored
8
+ if (state.pendingConsolidations.length >= PENDING_CONSOLIDATIONS_LIMIT) {
9
+ return;
10
+ }
11
+ // If there is too little available consolidation churn limit, consolidation requests are ignored
12
+ if (getConsolidationChurnLimit(state.epochCtx) <= MIN_ACTIVATION_BALANCE) {
13
+ return;
14
+ }
15
+ const { sourcePubkey, targetPubkey } = consolidationRequest;
16
+ const sourceIndex = state.epochCtx.getValidatorIndex(sourcePubkey);
17
+ const targetIndex = state.epochCtx.getValidatorIndex(targetPubkey);
18
+ if (sourceIndex === undefined || targetIndex === undefined) {
19
+ return;
20
+ }
21
+ // Verify that source != target, so a consolidation cannot be used as an exit.
22
+ if (sourceIndex === targetIndex) {
23
+ return;
24
+ }
25
+ const sourceValidator = state.validators.get(sourceIndex);
26
+ const targetValidator = state.validators.getReadonly(targetIndex);
27
+ const sourceWithdrawalAddress = sourceValidator.withdrawalCredentials.subarray(12);
28
+ const currentEpoch = state.epochCtx.epoch;
29
+ // Verify withdrawal credentials
30
+ if (!hasExecutionWithdrawalCredential(sourceValidator.withdrawalCredentials) ||
31
+ !hasExecutionWithdrawalCredential(targetValidator.withdrawalCredentials)) {
32
+ return;
33
+ }
34
+ if (Buffer.compare(sourceWithdrawalAddress, consolidationRequest.sourceAddress) !== 0) {
35
+ return;
36
+ }
37
+ // Verify the source and the target are active
38
+ if (!isActiveValidator(sourceValidator, currentEpoch) || !isActiveValidator(targetValidator, currentEpoch)) {
39
+ return;
40
+ }
41
+ // Verify exits for source and target have not been initiated
42
+ if (sourceValidator.exitEpoch !== FAR_FUTURE_EPOCH || targetValidator.exitEpoch !== FAR_FUTURE_EPOCH) {
43
+ return;
44
+ }
45
+ // TODO Electra: See if we can get rid of big int
46
+ const exitEpoch = computeConsolidationEpochAndUpdateChurn(state, BigInt(sourceValidator.effectiveBalance));
47
+ sourceValidator.exitEpoch = exitEpoch;
48
+ sourceValidator.withdrawableEpoch = exitEpoch + state.config.MIN_VALIDATOR_WITHDRAWABILITY_DELAY;
49
+ const pendingConsolidation = ssz.electra.PendingConsolidation.toViewDU({
50
+ sourceIndex,
51
+ targetIndex,
52
+ });
53
+ state.pendingConsolidations.push(pendingConsolidation);
54
+ }
55
+ //# sourceMappingURL=processConsolidationRequest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processConsolidationRequest.js","sourceRoot":"","sources":["../../src/block/processConsolidationRequest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAC,gBAAgB,EAAE,sBAAsB,EAAE,4BAA4B,EAAC,MAAM,kBAAkB,CAAC;AAGxG,OAAO,EAAC,0BAA0B,EAAE,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAC,gCAAgC,EAAC,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAC,uCAAuC,EAAC,MAAM,kBAAkB,CAAC;AAEzE,MAAM,UAAU,2BAA2B,CACzC,KAA+B,EAC/B,oBAAkD;IAElD,kFAAkF;IAClF,IAAI,KAAK,CAAC,qBAAqB,CAAC,MAAM,IAAI,4BAA4B,EAAE,CAAC;QACvE,OAAO;IACT,CAAC;IAED,iGAAiG;IACjG,IAAI,0BAA0B,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAsB,EAAE,CAAC;QACzE,OAAO;IACT,CAAC;IAED,MAAM,EAAC,YAAY,EAAE,YAAY,EAAC,GAAG,oBAAoB,CAAC;IAC1D,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;IACnE,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAEnE,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC3D,OAAO;IACT,CAAC;IAED,8EAA8E;IAC9E,IAAI,WAAW,KAAK,WAAW,EAAE,CAAC;QAChC,OAAO;IACT,CAAC;IAED,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC1D,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAClE,MAAM,uBAAuB,GAAG,eAAe,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnF,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;IAE1C,gCAAgC;IAChC,IACE,CAAC,gCAAgC,CAAC,eAAe,CAAC,qBAAqB,CAAC;QACxE,CAAC,gCAAgC,CAAC,eAAe,CAAC,qBAAqB,CAAC,EACxE,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,uBAAuB,EAAE,oBAAoB,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACtF,OAAO;IACT,CAAC;IAED,8CAA8C;IAC9C,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,YAAY,CAAC,EAAE,CAAC;QAC3G,OAAO;IACT,CAAC;IAED,6DAA6D;IAC7D,IAAI,eAAe,CAAC,SAAS,KAAK,gBAAgB,IAAI,eAAe,CAAC,SAAS,KAAK,gBAAgB,EAAE,CAAC;QACrG,OAAO;IACT,CAAC;IAED,iDAAiD;IACjD,MAAM,SAAS,GAAG,uCAAuC,CAAC,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC3G,eAAe,CAAC,SAAS,GAAG,SAAS,CAAC;IACtC,eAAe,CAAC,iBAAiB,GAAG,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,mCAAmC,CAAC;IAEjG,MAAM,oBAAoB,GAAG,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC,QAAQ,CAAC;QACrE,WAAW;QACX,WAAW;KACZ,CAAC,CAAC;IACH,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;AACzD,CAAC"}
@@ -1,5 +1,7 @@
1
1
  import { phase0 } from "@lodestar/types";
2
2
  import { ForkSeq } from "@lodestar/params";
3
+ import { DepositData } from "@lodestar/types/lib/phase0/types.js";
4
+ import { DepositRequest } from "@lodestar/types/lib/electra/types.js";
3
5
  import { CachedBeaconStateAllForks } from "../types.js";
4
6
  /**
5
7
  * Process a Deposit operation. Potentially adds a new validator to the registry. Mutates the validators and balances
@@ -8,4 +10,10 @@ import { CachedBeaconStateAllForks } from "../types.js";
8
10
  * PERF: Work depends on number of Deposit per block. On regular networks the average is 0 / block.
9
11
  */
10
12
  export declare function processDeposit(fork: ForkSeq, state: CachedBeaconStateAllForks, deposit: phase0.Deposit): void;
13
+ /**
14
+ * Adds a new validator into the registry. Or increase balance if already exist.
15
+ * Follows applyDeposit() in consensus spec. Will be used by processDeposit() and processDepositRequest()
16
+ *
17
+ */
18
+ export declare function applyDeposit(fork: ForkSeq, state: CachedBeaconStateAllForks, deposit: DepositData | DepositRequest): void;
11
19
  //# sourceMappingURL=processDeposit.d.ts.map
@@ -3,7 +3,7 @@ import { ssz } from "@lodestar/types";
3
3
  import { verifyMerkleBranch } from "@lodestar/utils";
4
4
  import { DEPOSIT_CONTRACT_TREE_DEPTH, DOMAIN_DEPOSIT, EFFECTIVE_BALANCE_INCREMENT, FAR_FUTURE_EPOCH, ForkSeq, MAX_EFFECTIVE_BALANCE, } from "@lodestar/params";
5
5
  import { ZERO_HASH } from "../constants/index.js";
6
- import { computeDomain, computeSigningRoot, increaseBalance } from "../util/index.js";
6
+ import { computeDomain, computeSigningRoot, hasCompoundingWithdrawalCredential, hasEth1WithdrawalCredential, increaseBalance, switchToCompoundingValidator, } from "../util/index.js";
7
7
  /**
8
8
  * Process a Deposit operation. Potentially adds a new validator to the registry. Mutates the validators and balances
9
9
  * trees, pushing contigious values at the end.
@@ -11,70 +11,110 @@ import { computeDomain, computeSigningRoot, increaseBalance } from "../util/inde
11
11
  * PERF: Work depends on number of Deposit per block. On regular networks the average is 0 / block.
12
12
  */
13
13
  export function processDeposit(fork, state, deposit) {
14
- const { config, validators, epochCtx } = state;
15
14
  // verify the merkle branch
16
15
  if (!verifyMerkleBranch(ssz.phase0.DepositData.hashTreeRoot(deposit.data), deposit.proof, DEPOSIT_CONTRACT_TREE_DEPTH + 1, state.eth1DepositIndex, state.eth1Data.depositRoot)) {
17
16
  throw new Error("Deposit has invalid merkle proof");
18
17
  }
19
18
  // deposits must be processed in order
20
19
  state.eth1DepositIndex += 1;
21
- const pubkey = deposit.data.pubkey; // Drop tree
22
- const amount = deposit.data.amount;
23
- const cachedIndex = epochCtx.pubkey2index.get(pubkey);
20
+ applyDeposit(fork, state, deposit.data);
21
+ }
22
+ /**
23
+ * Adds a new validator into the registry. Or increase balance if already exist.
24
+ * Follows applyDeposit() in consensus spec. Will be used by processDeposit() and processDepositRequest()
25
+ *
26
+ */
27
+ export function applyDeposit(fork, state, deposit) {
28
+ const { config, validators, epochCtx } = state;
29
+ const { pubkey, withdrawalCredentials, amount } = deposit;
30
+ const cachedIndex = epochCtx.getValidatorIndex(pubkey);
24
31
  if (cachedIndex === undefined || !Number.isSafeInteger(cachedIndex) || cachedIndex >= validators.length) {
25
- // verify the deposit signature (proof of posession) which is not checked by the deposit contract
26
- const depositMessage = {
27
- pubkey: deposit.data.pubkey, // Retain tree for hashing
28
- withdrawalCredentials: deposit.data.withdrawalCredentials, // Retain tree for hashing
29
- amount: deposit.data.amount,
30
- };
31
- // fork-agnostic domain since deposits are valid across forks
32
- const domain = computeDomain(DOMAIN_DEPOSIT, config.GENESIS_FORK_VERSION, ZERO_HASH);
33
- const signingRoot = computeSigningRoot(ssz.phase0.DepositMessage, depositMessage, domain);
34
- try {
35
- // Pubkeys must be checked for group + inf. This must be done only once when the validator deposit is processed
36
- const publicKey = PublicKey.fromBytes(pubkey, true);
37
- const signature = Signature.fromBytes(deposit.data.signature, true);
38
- if (!verify(signingRoot, publicKey, signature)) {
39
- return;
40
- }
32
+ if (isValidDepositSignature(config, pubkey, withdrawalCredentials, amount, deposit.signature)) {
33
+ addValidatorToRegistry(fork, state, pubkey, withdrawalCredentials, amount);
41
34
  }
42
- catch (e) {
43
- return; // Catch all BLS errors: failed key validation, failed signature validation, invalid signature
35
+ }
36
+ else {
37
+ if (fork < ForkSeq.electra) {
38
+ // increase balance by deposit amount right away pre-electra
39
+ increaseBalance(state, cachedIndex, amount);
44
40
  }
45
- // add validator and balance entries
46
- const effectiveBalance = Math.min(amount - (amount % EFFECTIVE_BALANCE_INCREMENT), MAX_EFFECTIVE_BALANCE);
47
- validators.push(ssz.phase0.Validator.toViewDU({
48
- pubkey,
49
- withdrawalCredentials: deposit.data.withdrawalCredentials,
50
- activationEligibilityEpoch: FAR_FUTURE_EPOCH,
51
- activationEpoch: FAR_FUTURE_EPOCH,
52
- exitEpoch: FAR_FUTURE_EPOCH,
53
- withdrawableEpoch: FAR_FUTURE_EPOCH,
54
- effectiveBalance,
55
- slashed: false,
56
- }));
57
- state.balances.push(amount);
58
- const validatorIndex = validators.length - 1;
59
- // Updating here is better than updating at once on epoch transition
60
- // - Simplify genesis fn applyDeposits(): effectiveBalanceIncrements is populated immediately
61
- // - Keep related code together to reduce risk of breaking this cache
62
- // - Should have equal performance since it sets a value in a flat array
63
- epochCtx.effectiveBalanceIncrementsSet(validatorIndex, effectiveBalance);
64
- // now that there is a new validator, update the epoch context with the new pubkey
65
- epochCtx.addPubkey(validatorIndex, pubkey);
66
- // Only after altair:
67
- if (fork >= ForkSeq.altair) {
68
- const stateAltair = state;
69
- stateAltair.inactivityScores.push(0);
70
- // add participation caches
71
- stateAltair.previousEpochParticipation.push(0);
72
- stateAltair.currentEpochParticipation.push(0);
41
+ else if (fork >= ForkSeq.electra) {
42
+ const stateElectra = state;
43
+ const pendingBalanceDeposit = ssz.electra.PendingBalanceDeposit.toViewDU({
44
+ index: cachedIndex,
45
+ amount: BigInt(amount),
46
+ });
47
+ stateElectra.pendingBalanceDeposits.push(pendingBalanceDeposit);
48
+ if (hasCompoundingWithdrawalCredential(withdrawalCredentials) &&
49
+ hasEth1WithdrawalCredential(validators.getReadonly(cachedIndex).withdrawalCredentials) &&
50
+ isValidDepositSignature(config, pubkey, withdrawalCredentials, amount, deposit.signature)) {
51
+ switchToCompoundingValidator(stateElectra, cachedIndex);
52
+ }
73
53
  }
74
54
  }
75
- else {
76
- // increase balance by deposit amount
77
- increaseBalance(state, cachedIndex, amount);
55
+ }
56
+ function addValidatorToRegistry(fork, state, pubkey, withdrawalCredentials, amount) {
57
+ const { validators, epochCtx } = state;
58
+ // add validator and balance entries
59
+ const effectiveBalance = fork < ForkSeq.electra ? Math.min(amount - (amount % EFFECTIVE_BALANCE_INCREMENT), MAX_EFFECTIVE_BALANCE) : 0;
60
+ validators.push(ssz.phase0.Validator.toViewDU({
61
+ pubkey,
62
+ withdrawalCredentials,
63
+ activationEligibilityEpoch: FAR_FUTURE_EPOCH,
64
+ activationEpoch: FAR_FUTURE_EPOCH,
65
+ exitEpoch: FAR_FUTURE_EPOCH,
66
+ withdrawableEpoch: FAR_FUTURE_EPOCH,
67
+ effectiveBalance,
68
+ slashed: false,
69
+ }));
70
+ const validatorIndex = validators.length - 1;
71
+ // TODO Electra: Review this
72
+ // Updating here is better than updating at once on epoch transition
73
+ // - Simplify genesis fn applyDeposits(): effectiveBalanceIncrements is populated immediately
74
+ // - Keep related code together to reduce risk of breaking this cache
75
+ // - Should have equal performance since it sets a value in a flat array
76
+ epochCtx.effectiveBalanceIncrementsSet(validatorIndex, effectiveBalance);
77
+ // now that there is a new validator, update the epoch context with the new pubkey
78
+ epochCtx.addPubkey(validatorIndex, pubkey);
79
+ // Only after altair:
80
+ if (fork >= ForkSeq.altair) {
81
+ const stateAltair = state;
82
+ stateAltair.inactivityScores.push(0);
83
+ // add participation caches
84
+ stateAltair.previousEpochParticipation.push(0);
85
+ stateAltair.currentEpochParticipation.push(0);
86
+ }
87
+ if (fork < ForkSeq.electra) {
88
+ state.balances.push(amount);
89
+ }
90
+ else if (fork >= ForkSeq.electra) {
91
+ state.balances.push(0);
92
+ const stateElectra = state;
93
+ const pendingBalanceDeposit = ssz.electra.PendingBalanceDeposit.toViewDU({
94
+ index: validatorIndex,
95
+ amount: BigInt(amount),
96
+ });
97
+ stateElectra.pendingBalanceDeposits.push(pendingBalanceDeposit);
98
+ }
99
+ }
100
+ function isValidDepositSignature(config, pubkey, withdrawalCredentials, amount, depositSignature) {
101
+ // verify the deposit signature (proof of posession) which is not checked by the deposit contract
102
+ const depositMessage = {
103
+ pubkey,
104
+ withdrawalCredentials,
105
+ amount,
106
+ };
107
+ // fork-agnostic domain since deposits are valid across forks
108
+ const domain = computeDomain(DOMAIN_DEPOSIT, config.GENESIS_FORK_VERSION, ZERO_HASH);
109
+ const signingRoot = computeSigningRoot(ssz.phase0.DepositMessage, depositMessage, domain);
110
+ try {
111
+ // Pubkeys must be checked for group + inf. This must be done only once when the validator deposit is processed
112
+ const publicKey = PublicKey.fromBytes(pubkey, true);
113
+ const signature = Signature.fromBytes(depositSignature, true);
114
+ return verify(signingRoot, publicKey, signature);
115
+ }
116
+ catch (e) {
117
+ return false; // Catch all BLS errors: failed key validation, failed signature validation, invalid signature
78
118
  }
79
119
  }
80
120
  //# sourceMappingURL=processDeposit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"processDeposit.js","sourceRoot":"","sources":["../../src/block/processDeposit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"processDeposit.js","sourceRoot":"","sources":["../../src/block/processDeposit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { electra } from "@lodestar/types";
2
+ import { ForkSeq } from "@lodestar/params";
3
+ import { CachedBeaconStateElectra } from "../types.js";
4
+ export declare function processDepositRequest(fork: ForkSeq, state: CachedBeaconStateElectra, depositRequest: electra.DepositRequest): void;
5
+ //# sourceMappingURL=processDepositRequest.d.ts.map
@@ -0,0 +1,9 @@
1
+ import { UNSET_DEPOSIT_REQUESTS_START_INDEX } from "@lodestar/params";
2
+ import { applyDeposit } from "./processDeposit.js";
3
+ export function processDepositRequest(fork, state, depositRequest) {
4
+ if (state.depositRequestsStartIndex === UNSET_DEPOSIT_REQUESTS_START_INDEX) {
5
+ state.depositRequestsStartIndex = BigInt(depositRequest.index);
6
+ }
7
+ applyDeposit(fork, state, depositRequest);
8
+ }
9
+ //# sourceMappingURL=processDepositRequest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processDepositRequest.js","sourceRoot":"","sources":["../../src/block/processDepositRequest.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,kCAAkC,EAAC,MAAM,kBAAkB,CAAC;AAG7E,OAAO,EAAC,YAAY,EAAC,MAAM,qBAAqB,CAAC;AAEjD,MAAM,UAAU,qBAAqB,CACnC,IAAa,EACb,KAA+B,EAC/B,cAAsC;IAEtC,IAAI,KAAK,CAAC,yBAAyB,KAAK,kCAAkC,EAAE,CAAC;QAC3E,KAAK,CAAC,yBAAyB,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACjE,CAAC;IAED,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;AAC5C,CAAC"}
@@ -7,7 +7,10 @@ import { processAttesterSlashing } from "./processAttesterSlashing.js";
7
7
  import { processDeposit } from "./processDeposit.js";
8
8
  import { processVoluntaryExit } from "./processVoluntaryExit.js";
9
9
  import { processBlsToExecutionChange } from "./processBlsToExecutionChange.js";
10
+ import { processWithdrawalRequest } from "./processWithdrawalRequest.js";
11
+ import { processDepositRequest } from "./processDepositRequest.js";
10
12
  import { ProcessBlockOpts } from "./types.js";
11
- export { processProposerSlashing, processAttesterSlashing, processAttestations, processDeposit, processVoluntaryExit, processBlsToExecutionChange, };
13
+ import { processConsolidationRequest } from "./processConsolidationRequest.js";
14
+ export { processProposerSlashing, processAttesterSlashing, processAttestations, processDeposit, processVoluntaryExit, processWithdrawalRequest, processBlsToExecutionChange, processDepositRequest, processConsolidationRequest, };
12
15
  export declare function processOperations(fork: ForkSeq, state: CachedBeaconStateAllForks, body: BeaconBlockBody, opts?: ProcessBlockOpts): void;
13
16
  //# sourceMappingURL=processOperations.d.ts.map
@@ -1,14 +1,18 @@
1
- import { ForkSeq, MAX_DEPOSITS } from "@lodestar/params";
1
+ import { ForkSeq } from "@lodestar/params";
2
+ import { getEth1DepositCount } from "../util/deposit.js";
2
3
  import { processAttestations } from "./processAttestations.js";
3
4
  import { processProposerSlashing } from "./processProposerSlashing.js";
4
5
  import { processAttesterSlashing } from "./processAttesterSlashing.js";
5
6
  import { processDeposit } from "./processDeposit.js";
6
7
  import { processVoluntaryExit } from "./processVoluntaryExit.js";
7
8
  import { processBlsToExecutionChange } from "./processBlsToExecutionChange.js";
8
- export { processProposerSlashing, processAttesterSlashing, processAttestations, processDeposit, processVoluntaryExit, processBlsToExecutionChange, };
9
+ import { processWithdrawalRequest } from "./processWithdrawalRequest.js";
10
+ import { processDepositRequest } from "./processDepositRequest.js";
11
+ import { processConsolidationRequest } from "./processConsolidationRequest.js";
12
+ export { processProposerSlashing, processAttesterSlashing, processAttestations, processDeposit, processVoluntaryExit, processWithdrawalRequest, processBlsToExecutionChange, processDepositRequest, processConsolidationRequest, };
9
13
  export function processOperations(fork, state, body, opts = { verifySignatures: true }) {
10
14
  // verify that outstanding deposits are processed up to the maximum number of deposits
11
- const maxDeposits = Math.min(MAX_DEPOSITS, state.eth1Data.depositCount - state.eth1DepositIndex);
15
+ const maxDeposits = getEth1DepositCount(state);
12
16
  if (body.deposits.length !== maxDeposits) {
13
17
  throw new Error(`Block contains incorrect number of deposits: depositCount=${body.deposits.length} expected=${maxDeposits}`);
14
18
  }
@@ -23,12 +27,25 @@ export function processOperations(fork, state, body, opts = { verifySignatures:
23
27
  processDeposit(fork, state, deposit);
24
28
  }
25
29
  for (const voluntaryExit of body.voluntaryExits) {
26
- processVoluntaryExit(state, voluntaryExit, opts.verifySignatures);
30
+ processVoluntaryExit(fork, state, voluntaryExit, opts.verifySignatures);
27
31
  }
28
32
  if (fork >= ForkSeq.capella) {
29
33
  for (const blsToExecutionChange of body.blsToExecutionChanges) {
30
34
  processBlsToExecutionChange(state, blsToExecutionChange);
31
35
  }
32
36
  }
37
+ if (fork >= ForkSeq.electra) {
38
+ const stateElectra = state;
39
+ const bodyElectra = body;
40
+ for (const depositRequest of bodyElectra.executionPayload.depositRequests) {
41
+ processDepositRequest(fork, stateElectra, depositRequest);
42
+ }
43
+ for (const elWithdrawalRequest of bodyElectra.executionPayload.withdrawalRequests) {
44
+ processWithdrawalRequest(fork, stateElectra, elWithdrawalRequest);
45
+ }
46
+ for (const elConsolidationRequest of bodyElectra.executionPayload.consolidationRequests) {
47
+ processConsolidationRequest(stateElectra, elConsolidationRequest);
48
+ }
49
+ }
33
50
  }
34
51
  //# sourceMappingURL=processOperations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"processOperations.js","sourceRoot":"","sources":["../../src/block/processOperations.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAE,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAC,mBAAmB,EAAC,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAC,uBAAuB,EAAC,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAC,uBAAuB,EAAC,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAC,cAAc,EAAC,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAC,oBAAoB,EAAC,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAC,2BAA2B,EAAC,MAAM,kCAAkC,CAAC;AAG7E,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACpB,2BAA2B,GAC5B,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAC/B,IAAa,EACb,KAAgC,EAChC,IAAqB,EACrB,OAAyB,EAAC,gBAAgB,EAAE,IAAI,EAAC;IAEjD,sFAAsF;IACtF,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,YAAY,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACjG,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CACb,6DAA6D,IAAI,CAAC,QAAQ,CAAC,MAAM,aAAa,WAAW,EAAE,CAC5G,CAAC;IACJ,CAAC;IAED,KAAK,MAAM,gBAAgB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACtD,uBAAuB,CAAC,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAChF,CAAC;IACD,KAAK,MAAM,gBAAgB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACtD,uBAAuB,CAAC,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAChF,CAAC;IAED,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAE3E,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IACD,KAAK,MAAM,aAAa,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;QAChD,oBAAoB,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAC5B,KAAK,MAAM,oBAAoB,IAAK,IAAgC,CAAC,qBAAqB,EAAE,CAAC;YAC3F,2BAA2B,CAAC,KAAiC,EAAE,oBAAoB,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"processOperations.js","sourceRoot":"","sources":["../../src/block/processOperations.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { ForkSeq } from "@lodestar/params";
1
2
  import { phase0 } from "@lodestar/types";
2
3
  import { CachedBeaconStateAllForks } from "../types.js";
3
4
  /**
@@ -5,6 +6,6 @@ import { CachedBeaconStateAllForks } from "../types.js";
5
6
  *
6
7
  * PERF: Work depends on number of VoluntaryExit per block. On regular networks the average is 0 / block.
7
8
  */
8
- export declare function processVoluntaryExit(state: CachedBeaconStateAllForks, signedVoluntaryExit: phase0.SignedVoluntaryExit, verifySignature?: boolean): void;
9
+ export declare function processVoluntaryExit(fork: ForkSeq, state: CachedBeaconStateAllForks, signedVoluntaryExit: phase0.SignedVoluntaryExit, verifySignature?: boolean): void;
9
10
  export declare function isValidVoluntaryExit(state: CachedBeaconStateAllForks, signedVoluntaryExit: phase0.SignedVoluntaryExit, verifySignature?: boolean): boolean;
10
11
  //# sourceMappingURL=processVoluntaryExit.d.ts.map
@@ -1,5 +1,5 @@
1
- import { FAR_FUTURE_EPOCH } from "@lodestar/params";
2
- import { isActiveValidator } from "../util/index.js";
1
+ import { FAR_FUTURE_EPOCH, ForkSeq } from "@lodestar/params";
2
+ import { getPendingBalanceToWithdraw, isActiveValidator } from "../util/index.js";
3
3
  import { verifyVoluntaryExitSignature } from "../signatureSets/index.js";
4
4
  import { initiateValidatorExit } from "./index.js";
5
5
  /**
@@ -7,12 +7,15 @@ import { initiateValidatorExit } from "./index.js";
7
7
  *
8
8
  * PERF: Work depends on number of VoluntaryExit per block. On regular networks the average is 0 / block.
9
9
  */
10
- export function processVoluntaryExit(state, signedVoluntaryExit, verifySignature = true) {
11
- if (!isValidVoluntaryExit(state, signedVoluntaryExit, verifySignature)) {
12
- throw Error("Invalid voluntary exit");
10
+ export function processVoluntaryExit(fork, state, signedVoluntaryExit, verifySignature = true) {
11
+ const isValidExit = fork >= ForkSeq.electra
12
+ ? isValidVoluntaryExitElectra(state, signedVoluntaryExit, verifySignature)
13
+ : isValidVoluntaryExit(state, signedVoluntaryExit, verifySignature);
14
+ if (!isValidExit) {
15
+ throw Error(`Invalid voluntary exit at forkSeq=${fork}`);
13
16
  }
14
17
  const validator = state.validators.get(signedVoluntaryExit.message.validatorIndex);
15
- initiateValidatorExit(state, validator);
18
+ initiateValidatorExit(fork, state, validator);
16
19
  }
17
20
  export function isValidVoluntaryExit(state, signedVoluntaryExit, verifySignature = true) {
18
21
  const { config, epochCtx } = state;
@@ -31,4 +34,11 @@ export function isValidVoluntaryExit(state, signedVoluntaryExit, verifySignature
31
34
  // verify signature
32
35
  (!verifySignature || verifyVoluntaryExitSignature(state, signedVoluntaryExit)));
33
36
  }
37
+ function isValidVoluntaryExitElectra(state, signedVoluntaryExit, verifySignature = true) {
38
+ // only exit validator if it has no pending withdrawals in the queue (post-Electra only)
39
+ if (getPendingBalanceToWithdraw(state, signedVoluntaryExit.message.validatorIndex) === 0) {
40
+ return isValidVoluntaryExit(state, signedVoluntaryExit, verifySignature);
41
+ }
42
+ return false;
43
+ }
34
44
  //# sourceMappingURL=processVoluntaryExit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"processVoluntaryExit.js","sourceRoot":"","sources":["../../src/block/processVoluntaryExit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAC,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAC,4BAA4B,EAAC,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAC,qBAAqB,EAAC,MAAM,YAAY,CAAC;AAEjD;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAAgC,EAChC,mBAA+C,EAC/C,eAAe,GAAG,IAAI;IAEtB,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,mBAAmB,EAAE,eAAe,CAAC,EAAE,CAAC;QACvE,MAAM,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACnF,qBAAqB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,KAAgC,EAChC,mBAA+C,EAC/C,eAAe,GAAG,IAAI;IAEtB,MAAM,EAAC,MAAM,EAAE,QAAQ,EAAC,GAAG,KAAK,CAAC;IACjC,MAAM,aAAa,GAAG,mBAAmB,CAAC,OAAO,CAAC;IAClD,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;IACrE,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC;IAEpC,OAAO;IACL,iCAAiC;IACjC,iBAAiB,CAAC,SAAS,EAAE,YAAY,CAAC;QAC1C,qCAAqC;QACrC,SAAS,CAAC,SAAS,KAAK,gBAAgB;QACxC,qFAAqF;QACrF,YAAY,IAAI,aAAa,CAAC,KAAK;QACnC,mDAAmD;QACnD,YAAY,IAAI,SAAS,CAAC,eAAe,GAAG,MAAM,CAAC,sBAAsB;QACzE,mBAAmB;QACnB,CAAC,CAAC,eAAe,IAAI,4BAA4B,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAC/E,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"processVoluntaryExit.js","sourceRoot":"","sources":["../../src/block/processVoluntaryExit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAE,OAAO,EAAC,MAAM,kBAAkB,CAAC;AAE3D,OAAO,EAAC,2BAA2B,EAAE,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AAEhF,OAAO,EAAC,4BAA4B,EAAC,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAC,qBAAqB,EAAC,MAAM,YAAY,CAAC;AAEjD;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAa,EACb,KAAgC,EAChC,mBAA+C,EAC/C,eAAe,GAAG,IAAI;IAEtB,MAAM,WAAW,GACf,IAAI,IAAI,OAAO,CAAC,OAAO;QACrB,CAAC,CAAC,2BAA2B,CAAC,KAAiC,EAAE,mBAAmB,EAAE,eAAe,CAAC;QACtG,CAAC,CAAC,oBAAoB,CAAC,KAAK,EAAE,mBAAmB,EAAE,eAAe,CAAC,CAAC;IACxE,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,KAAK,CAAC,qCAAqC,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACnF,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,KAAgC,EAChC,mBAA+C,EAC/C,eAAe,GAAG,IAAI;IAEtB,MAAM,EAAC,MAAM,EAAE,QAAQ,EAAC,GAAG,KAAK,CAAC;IACjC,MAAM,aAAa,GAAG,mBAAmB,CAAC,OAAO,CAAC;IAClD,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;IACrE,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC;IAEpC,OAAO;IACL,iCAAiC;IACjC,iBAAiB,CAAC,SAAS,EAAE,YAAY,CAAC;QAC1C,qCAAqC;QACrC,SAAS,CAAC,SAAS,KAAK,gBAAgB;QACxC,qFAAqF;QACrF,YAAY,IAAI,aAAa,CAAC,KAAK;QACnC,mDAAmD;QACnD,YAAY,IAAI,SAAS,CAAC,eAAe,GAAG,MAAM,CAAC,sBAAsB;QACzE,mBAAmB;QACnB,CAAC,CAAC,eAAe,IAAI,4BAA4B,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAC/E,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAClC,KAA+B,EAC/B,mBAA+C,EAC/C,eAAe,GAAG,IAAI;IAEtB,wFAAwF;IACxF,IAAI,2BAA2B,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QACzF,OAAO,oBAAoB,CAAC,KAAK,EAAE,mBAAmB,EAAE,eAAe,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { electra } from "@lodestar/types";
2
+ import { ForkSeq } from "@lodestar/params";
3
+ import { CachedBeaconStateElectra } from "../types.js";
4
+ export declare function processWithdrawalRequest(fork: ForkSeq, state: CachedBeaconStateElectra, withdrawalRequest: electra.WithdrawalRequest): void;
5
+ //# sourceMappingURL=processWithdrawalRequest.d.ts.map