@lodestar/state-transition 1.22.0-dev.9c62011986 → 1.22.0-dev.9f4bf50408
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -165
- package/lib/block/index.js +1 -1
- package/lib/block/index.js.map +1 -1
- package/lib/block/initiateValidatorExit.d.ts +2 -1
- package/lib/block/initiateValidatorExit.js +21 -13
- package/lib/block/initiateValidatorExit.js.map +1 -1
- package/lib/block/isValidIndexedAttestation.js +5 -2
- package/lib/block/isValidIndexedAttestation.js.map +1 -1
- package/lib/block/processAttestationPhase0.d.ts +2 -2
- package/lib/block/processAttestationPhase0.js +33 -11
- package/lib/block/processAttestationPhase0.js.map +1 -1
- package/lib/block/processAttestations.d.ts +2 -2
- package/lib/block/processAttestations.js.map +1 -1
- package/lib/block/processAttestationsAltair.d.ts +2 -2
- package/lib/block/processAttestationsAltair.js +3 -3
- package/lib/block/processAttestationsAltair.js.map +1 -1
- package/lib/block/processBlockHeader.js +3 -2
- package/lib/block/processBlockHeader.js.map +1 -1
- package/lib/block/processBlsToExecutionChange.js +3 -2
- package/lib/block/processBlsToExecutionChange.js.map +1 -1
- package/lib/block/processConsolidationRequest.d.ts +4 -0
- package/lib/block/processConsolidationRequest.js +55 -0
- package/lib/block/processConsolidationRequest.js.map +1 -0
- package/lib/block/processDeposit.d.ts +8 -0
- package/lib/block/processDeposit.js +94 -54
- package/lib/block/processDeposit.js.map +1 -1
- package/lib/block/processDepositRequest.d.ts +5 -0
- package/lib/block/processDepositRequest.js +9 -0
- package/lib/block/processDepositRequest.js.map +1 -0
- package/lib/block/processExecutionPayload.js +4 -3
- package/lib/block/processExecutionPayload.js.map +1 -1
- package/lib/block/processOperations.d.ts +4 -1
- package/lib/block/processOperations.js +21 -4
- package/lib/block/processOperations.js.map +1 -1
- package/lib/block/processVoluntaryExit.d.ts +2 -1
- package/lib/block/processVoluntaryExit.js +16 -6
- package/lib/block/processVoluntaryExit.js.map +1 -1
- package/lib/block/processWithdrawalRequest.d.ts +5 -0
- package/lib/block/processWithdrawalRequest.js +67 -0
- package/lib/block/processWithdrawalRequest.js.map +1 -0
- package/lib/block/processWithdrawals.d.ts +5 -3
- package/lib/block/processWithdrawals.js +70 -17
- package/lib/block/processWithdrawals.js.map +1 -1
- package/lib/block/slashValidator.js +9 -5
- package/lib/block/slashValidator.js.map +1 -1
- package/lib/cache/effectiveBalanceIncrements.d.ts +3 -4
- package/lib/cache/effectiveBalanceIncrements.js +5 -5
- package/lib/cache/effectiveBalanceIncrements.js.map +1 -1
- package/lib/cache/epochCache.d.ts +66 -8
- package/lib/cache/epochCache.js +185 -22
- package/lib/cache/epochCache.js.map +1 -1
- package/lib/cache/epochTransitionCache.d.ts +12 -2
- package/lib/cache/epochTransitionCache.js +6 -3
- package/lib/cache/epochTransitionCache.js.map +1 -1
- package/lib/cache/pubkeyCache.d.ts +23 -3
- package/lib/cache/pubkeyCache.js +8 -1
- package/lib/cache/pubkeyCache.js.map +1 -1
- package/lib/cache/stateCache.d.ts +4 -2
- package/lib/cache/stateCache.js +2 -1
- package/lib/cache/stateCache.js.map +1 -1
- package/lib/cache/syncCommitteeCache.js +2 -2
- package/lib/cache/syncCommitteeCache.js.map +1 -1
- package/lib/cache/types.d.ts +1 -0
- package/lib/epoch/index.d.ts +6 -2
- package/lib/epoch/index.js +27 -5
- package/lib/epoch/index.js.map +1 -1
- package/lib/epoch/processEffectiveBalanceUpdates.d.ts +4 -1
- package/lib/epoch/processEffectiveBalanceUpdates.js +25 -6
- package/lib/epoch/processEffectiveBalanceUpdates.js.map +1 -1
- package/lib/epoch/processPendingBalanceDeposits.d.ts +12 -0
- package/lib/epoch/processPendingBalanceDeposits.js +68 -0
- package/lib/epoch/processPendingBalanceDeposits.js.map +1 -0
- package/lib/epoch/processPendingConsolidations.d.ts +16 -0
- package/lib/epoch/processPendingConsolidations.js +49 -0
- package/lib/epoch/processPendingConsolidations.js.map +1 -0
- package/lib/epoch/processRegistryUpdates.d.ts +2 -1
- package/lib/epoch/processRegistryUpdates.js +6 -3
- package/lib/epoch/processRegistryUpdates.js.map +1 -1
- package/lib/epoch/processRewardsAndPenalties.js +2 -1
- package/lib/epoch/processRewardsAndPenalties.js.map +1 -1
- package/lib/epoch/processSyncCommitteeUpdates.d.ts +2 -1
- package/lib/epoch/processSyncCommitteeUpdates.js +4 -3
- package/lib/epoch/processSyncCommitteeUpdates.js.map +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/metrics.d.ts +5 -0
- package/lib/metrics.js.map +1 -1
- package/lib/signatureSets/attesterSlashings.d.ts +3 -3
- package/lib/signatureSets/attesterSlashings.js +1 -2
- package/lib/signatureSets/attesterSlashings.js.map +1 -1
- package/lib/signatureSets/index.js +2 -2
- package/lib/signatureSets/index.js.map +1 -1
- package/lib/signatureSets/indexedAttestation.js +2 -1
- package/lib/signatureSets/indexedAttestation.js.map +1 -1
- package/lib/slot/index.d.ts +1 -0
- package/lib/slot/index.js +1 -0
- package/lib/slot/index.js.map +1 -1
- package/lib/slot/upgradeStateToAltair.js +1 -1
- package/lib/slot/upgradeStateToAltair.js.map +1 -1
- package/lib/slot/upgradeStateToElectra.d.ts +8 -0
- package/lib/slot/upgradeStateToElectra.js +138 -0
- package/lib/slot/upgradeStateToElectra.js.map +1 -0
- package/lib/stateTransition.d.ts +1 -0
- package/lib/stateTransition.js +12 -8
- package/lib/stateTransition.js.map +1 -1
- package/lib/types.d.ts +2 -2
- package/lib/util/balance.js +2 -2
- package/lib/util/balance.js.map +1 -1
- package/lib/util/deposit.d.ts +4 -0
- package/lib/util/deposit.js +22 -0
- package/lib/util/deposit.js.map +1 -0
- package/lib/util/electra.d.ts +8 -0
- package/lib/util/electra.js +47 -0
- package/lib/util/electra.js.map +1 -0
- package/lib/util/epoch.d.ts +4 -1
- package/lib/util/epoch.js +37 -0
- package/lib/util/epoch.js.map +1 -1
- package/lib/util/epochShuffling.js +2 -3
- package/lib/util/epochShuffling.js.map +1 -1
- package/lib/util/execution.js +8 -0
- package/lib/util/execution.js.map +1 -1
- package/lib/util/genesis.d.ts +1 -1
- package/lib/util/genesis.js +30 -9
- package/lib/util/genesis.js.map +1 -1
- package/lib/util/index.d.ts +3 -0
- package/lib/util/index.js +3 -0
- package/lib/util/index.js.map +1 -1
- package/lib/util/loadState/index.d.ts +1 -1
- package/lib/util/loadState/index.js +1 -1
- package/lib/util/loadState/index.js.map +1 -1
- package/lib/util/loadState/loadState.d.ts +7 -0
- package/lib/util/loadState/loadState.js +15 -0
- package/lib/util/loadState/loadState.js.map +1 -1
- package/lib/util/seed.d.ts +4 -3
- package/lib/util/seed.js +11 -10
- package/lib/util/seed.js.map +1 -1
- package/lib/util/syncCommittee.d.ts +2 -1
- package/lib/util/syncCommittee.js +2 -2
- package/lib/util/syncCommittee.js.map +1 -1
- package/lib/util/validator.d.ts +10 -1
- package/lib/util/validator.js +35 -1
- package/lib/util/validator.js.map +1 -1
- package/lib/util/weakSubjectivity.js +2 -2
- package/lib/util/weakSubjectivity.js.map +1 -1
- package/package.json +9 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processAttestationPhase0.js","sourceRoot":"","sources":["../../src/block/processAttestationPhase0.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"processAttestationPhase0.js","sourceRoot":"","sources":["../../src/block/processAttestationPhase0.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
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:
|
|
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,
|
|
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:
|
|
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
|
|
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 =
|
|
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":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAC,OAAO,EAAC,MAAM,iBAAiB,CAAC;AAExC,OAAO,EACL,+BAA+B,EAC/B,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,kBAAkB,GAEnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAC,eAAe,EAAE,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AAErE,OAAO,EAAC,SAAS,EAAC,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAC,qCAAqC,EAAC,MAAM,wCAAwC,CAAC;AAC7F,OAAO,EAAC,eAAe,EAAE,cAAc,EAAE,mBAAmB,EAAC,MAAM,+BAA+B,CAAC;AAEnG,MAAM,yBAAyB,GAAG,CAAC,CAAC,kBAAkB,GAAG,eAAe,CAAC,GAAG,kBAAkB,CAAC,GAAG,eAAe,CAAC;AAElH,iHAAiH;AACjH,MAAM,aAAa,GAAG,CAAC,IAAI,wBAAwB,CAAC;AACpD,MAAM,aAAa,GAAG,CAAC,IAAI,wBAAwB,CAAC;AACpD,MAAM,WAAW,GAAG,CAAC,IAAI,sBAAsB,CAAC;AAChD,MAAM,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AAEtD,MAAM,UAAU,yBAAyB,CACvC,IAAa,EACb,KAA8B,EAC9B,
|
|
1
|
+
{"version":3,"file":"processAttestationsAltair.js","sourceRoot":"","sources":["../../src/block/processAttestationsAltair.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { byteArrayEquals } from "@chainsafe/ssz";
|
|
2
2
|
import { ssz } from "@lodestar/types";
|
|
3
|
+
import { toRootHex } from "@lodestar/utils";
|
|
3
4
|
import { ZERO_HASH } from "../constants/index.js";
|
|
4
5
|
import { blindedOrFullBlockToHeader } from "../util/index.js";
|
|
5
6
|
/**
|
|
@@ -25,7 +26,7 @@ export function processBlockHeader(state, block) {
|
|
|
25
26
|
}
|
|
26
27
|
// verify that the parent matches
|
|
27
28
|
if (!byteArrayEquals(block.parentRoot, ssz.phase0.BeaconBlockHeader.hashTreeRoot(state.latestBlockHeader))) {
|
|
28
|
-
throw new Error(`Block parent root ${
|
|
29
|
+
throw new Error(`Block parent root ${toRootHex(block.parentRoot)} does not match state latest block, block slot=${slot}`);
|
|
29
30
|
}
|
|
30
31
|
const blockHeader = blindedOrFullBlockToHeader(state.config, block);
|
|
31
32
|
// cache current block as the new latest block
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processBlockHeader.js","sourceRoot":"","sources":["../../src/block/processBlockHeader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"processBlockHeader.js","sourceRoot":"","sources":["../../src/block/processBlockHeader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAkC,GAAG,EAAC,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAC,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAC,0BAA0B,EAAC,MAAM,kBAAkB,CAAC;AAC5D;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAgC,EAAE,KAAuC;IAC1G,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,8BAA8B;IAC9B,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,kDAAkD,KAAK,CAAC,IAAI,cAAc,IAAI,EAAE,CAAC,CAAC;IACpG,CAAC;IACD,0DAA0D;IAC1D,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CACb,yDAAyD,KAAK,CAAC,IAAI,2BAA2B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAC7H,CAAC;IACJ,CAAC;IACD,kDAAkD;IAClD,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC7D,IAAI,KAAK,CAAC,aAAa,KAAK,aAAa,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CACb,+EAA+E,KAAK,CAAC,aAAa,uBAAuB,aAAa,EAAE,CACzI,CAAC;IACJ,CAAC;IAED,iCAAiC;IACjC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC;QAC3G,MAAM,IAAI,KAAK,CACb,qBAAqB,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,kDAAkD,IAAI,EAAE,CACzG,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,0BAA0B,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpE,8CAA8C;IAC9C,KAAK,CAAC,iBAAiB,GAAG,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC;QAC9D,IAAI;QACJ,aAAa;QACb,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,SAAS,EAAE,SAAS;QACpB,QAAQ,EAAE,WAAW,CAAC,QAAQ;KAC/B,CAAC,CAAC;IAEH,yFAAyF;IACzF,IAAI,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { byteArrayEquals } from "@chainsafe/ssz";
|
|
2
2
|
import { digest } from "@chainsafe/as-sha256";
|
|
3
3
|
import { BLS_WITHDRAWAL_PREFIX, ETH1_ADDRESS_WITHDRAWAL_PREFIX } from "@lodestar/params";
|
|
4
|
+
import { toHex } from "@lodestar/utils";
|
|
4
5
|
import { verifyBlsToExecutionChangeSignature } from "../signatureSets/index.js";
|
|
5
6
|
export function processBlsToExecutionChange(state, signedBlsToExecutionChange) {
|
|
6
7
|
const addressChange = signedBlsToExecutionChange.message;
|
|
@@ -37,7 +38,7 @@ export function isValidBlsToExecutionChange(state, signedBLSToExecutionChange, v
|
|
|
37
38
|
if (!byteArrayEquals(withdrawalCredentials, digestCredentials)) {
|
|
38
39
|
return {
|
|
39
40
|
valid: false,
|
|
40
|
-
error: Error(`Invalid withdrawalCredentials expected=${
|
|
41
|
+
error: Error(`Invalid withdrawalCredentials expected=${toHex(withdrawalCredentials)} actual=${toHex(digestCredentials)}`),
|
|
41
42
|
};
|
|
42
43
|
}
|
|
43
44
|
if (verifySignature && !verifyBlsToExecutionChangeSignature(state, signedBLSToExecutionChange)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processBlsToExecutionChange.js","sourceRoot":"","sources":["../../src/block/processBlsToExecutionChange.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"processBlsToExecutionChange.js","sourceRoot":"","sources":["../../src/block/processBlsToExecutionChange.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAC,MAAM,EAAC,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAC,qBAAqB,EAAE,8BAA8B,EAAC,MAAM,kBAAkB,CAAC;AACvF,OAAO,EAAC,KAAK,EAAC,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAC,mCAAmC,EAAC,MAAM,2BAA2B,CAAC;AAI9E,MAAM,UAAU,2BAA2B,CACzC,KAA+B,EAC/B,0BAA8D;IAE9D,MAAM,aAAa,GAAG,0BAA0B,CAAC,OAAO,CAAC;IAEzD,MAAM,UAAU,GAAG,2BAA2B,CAAC,KAAK,EAAE,0BAA0B,EAAE,IAAI,CAAC,CAAC;IACxF,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,UAAU,CAAC,KAAK,CAAC;IACzB,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;IACrE,MAAM,wBAAwB,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IACpD,wBAAwB,CAAC,CAAC,CAAC,GAAG,8BAA8B,CAAC;IAC7D,wBAAwB,CAAC,GAAG,CAAC,aAAa,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAEnE,+BAA+B;IAC/B,SAAS,CAAC,qBAAqB,GAAG,wBAAwB,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,KAA+B,EAC/B,0BAA8D,EAC9D,eAAe,GAAG,IAAI;IAEtB,MAAM,aAAa,GAAG,0BAA0B,CAAC,OAAO,CAAC;IAEzD,IAAI,aAAa,CAAC,cAAc,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;QAC5D,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,KAAK,CACV,4BAA4B,aAAa,CAAC,cAAc,2BAA2B,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAC7G;SACF,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;IAC7E,MAAM,EAAC,qBAAqB,EAAC,GAAG,SAAS,CAAC;IAC1C,IAAI,qBAAqB,CAAC,CAAC,CAAC,KAAK,qBAAqB,EAAE,CAAC;QACvD,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,KAAK,CACV,iDAAiD,qBAAqB,WAAW,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAC5G;SACF,CAAC;IACJ,CAAC;IAED,MAAM,iBAAiB,GAAG,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;IAC9D,0EAA0E;IAC1E,iBAAiB,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC;IAC7C,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE,iBAAiB,CAAC,EAAE,CAAC;QAC/D,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,KAAK,CACV,0CAA0C,KAAK,CAAC,qBAAqB,CAAC,WAAW,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAC5G;SACF,CAAC;IACJ,CAAC;IAED,IAAI,eAAe,IAAI,CAAC,mCAAmC,CAAC,KAAK,EAAE,0BAA0B,CAAC,EAAE,CAAC;QAC/F,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,KAAK,CACV,iFAAiF,aAAa,CAAC,cAAc,EAAE,CAChH;SACF,CAAC;IACJ,CAAC;IAED,OAAO,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC;AACvB,CAAC"}
|
|
@@ -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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
-
|
|
26
|
-
|
|
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
|
-
|
|
43
|
-
|
|
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
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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":"AAAA,OAAO,EAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAC7D,OAAO,
|
|
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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { byteArrayEquals } from "@chainsafe/ssz";
|
|
2
2
|
import { isExecutionPayload } from "@lodestar/types";
|
|
3
3
|
import { ForkSeq, MAX_BLOBS_PER_BLOCK } from "@lodestar/params";
|
|
4
|
+
import { toHex, toRootHex } from "@lodestar/utils";
|
|
4
5
|
import { getRandaoMix } from "../util/index.js";
|
|
5
6
|
import { isMergeTransitionComplete, getFullOrBlindedPayloadFromBody, executionPayloadToPayloadHeader, } from "../util/execution.js";
|
|
6
7
|
import { ExecutionPayloadStatus } from "./externalData.js";
|
|
@@ -11,13 +12,13 @@ export function processExecutionPayload(fork, state, body, externalData) {
|
|
|
11
12
|
if (isMergeTransitionComplete(state)) {
|
|
12
13
|
const { latestExecutionPayloadHeader } = state;
|
|
13
14
|
if (!byteArrayEquals(payload.parentHash, latestExecutionPayloadHeader.blockHash)) {
|
|
14
|
-
throw Error(`Invalid execution payload parentHash ${
|
|
15
|
+
throw Error(`Invalid execution payload parentHash ${toRootHex(payload.parentHash)} latest blockHash ${toRootHex(latestExecutionPayloadHeader.blockHash)}`);
|
|
15
16
|
}
|
|
16
17
|
}
|
|
17
18
|
// Verify random
|
|
18
19
|
const expectedRandom = getRandaoMix(state, state.epochCtx.epoch);
|
|
19
20
|
if (!byteArrayEquals(payload.prevRandao, expectedRandom)) {
|
|
20
|
-
throw Error(`Invalid execution payload random ${
|
|
21
|
+
throw Error(`Invalid execution payload random ${toHex(payload.prevRandao)} expected=${toHex(expectedRandom)}`);
|
|
21
22
|
}
|
|
22
23
|
// Verify timestamp
|
|
23
24
|
//
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processExecutionPayload.js","sourceRoot":"","sources":["../../src/block/processExecutionPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"processExecutionPayload.js","sourceRoot":"","sources":["../../src/block/processExecutionPayload.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
-
|
|
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
|
|
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
|
-
|
|
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 =
|
|
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,
|
|
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
|