@lodestar/state-transition 1.39.0 → 1.40.0-dev.313caaeef7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/block/index.d.ts +1 -0
- package/lib/block/index.d.ts.map +1 -1
- package/lib/block/index.js +1 -0
- package/lib/block/index.js.map +1 -1
- package/lib/block/isValidIndexedAttestation.d.ts +4 -5
- package/lib/block/isValidIndexedAttestation.d.ts.map +1 -1
- package/lib/block/isValidIndexedAttestation.js +9 -10
- package/lib/block/isValidIndexedAttestation.js.map +1 -1
- package/lib/block/processAttestationPhase0.d.ts.map +1 -1
- package/lib/block/processAttestationPhase0.js +1 -1
- package/lib/block/processAttestationPhase0.js.map +1 -1
- package/lib/block/processAttesterSlashing.d.ts +3 -2
- package/lib/block/processAttesterSlashing.d.ts.map +1 -1
- package/lib/block/processAttesterSlashing.js +3 -3
- package/lib/block/processAttesterSlashing.js.map +1 -1
- package/lib/block/processBlsToExecutionChange.d.ts +3 -1
- package/lib/block/processBlsToExecutionChange.d.ts.map +1 -1
- package/lib/block/processBlsToExecutionChange.js +7 -11
- package/lib/block/processBlsToExecutionChange.js.map +1 -1
- package/lib/block/processDepositRequest.d.ts +8 -2
- package/lib/block/processDepositRequest.d.ts.map +1 -1
- package/lib/block/processDepositRequest.js +81 -8
- package/lib/block/processDepositRequest.js.map +1 -1
- package/lib/block/processExecutionPayloadBid.d.ts.map +1 -1
- package/lib/block/processExecutionPayloadBid.js +14 -27
- package/lib/block/processExecutionPayloadBid.js.map +1 -1
- package/lib/block/processExecutionPayloadEnvelope.d.ts.map +1 -1
- package/lib/block/processExecutionPayloadEnvelope.js +25 -24
- package/lib/block/processExecutionPayloadEnvelope.js.map +1 -1
- package/lib/block/processOperations.js +1 -1
- package/lib/block/processOperations.js.map +1 -1
- package/lib/block/processProposerSlashing.d.ts +5 -2
- package/lib/block/processProposerSlashing.d.ts.map +1 -1
- package/lib/block/processProposerSlashing.js +7 -5
- package/lib/block/processProposerSlashing.js.map +1 -1
- package/lib/block/processVoluntaryExit.d.ts +1 -1
- package/lib/block/processVoluntaryExit.d.ts.map +1 -1
- package/lib/block/processVoluntaryExit.js +44 -2
- package/lib/block/processVoluntaryExit.js.map +1 -1
- package/lib/block/processWithdrawals.d.ts +1 -0
- package/lib/block/processWithdrawals.d.ts.map +1 -1
- package/lib/block/processWithdrawals.js +121 -66
- package/lib/block/processWithdrawals.js.map +1 -1
- package/lib/cache/epochCache.d.ts +8 -28
- package/lib/cache/epochCache.d.ts.map +1 -1
- package/lib/cache/epochCache.js +40 -180
- package/lib/cache/epochCache.js.map +1 -1
- package/lib/cache/epochTransitionCache.d.ts +5 -12
- package/lib/cache/epochTransitionCache.d.ts.map +1 -1
- package/lib/cache/epochTransitionCache.js +4 -14
- package/lib/cache/epochTransitionCache.js.map +1 -1
- package/lib/cache/stateCache.d.ts.map +1 -1
- package/lib/cache/stateCache.js +1 -2
- package/lib/cache/stateCache.js.map +1 -1
- package/lib/epoch/processBuilderPendingPayments.d.ts.map +1 -1
- package/lib/epoch/processBuilderPendingPayments.js +1 -4
- package/lib/epoch/processBuilderPendingPayments.js.map +1 -1
- package/lib/epoch/processProposerLookahead.d.ts.map +1 -1
- package/lib/epoch/processProposerLookahead.js +3 -6
- package/lib/epoch/processProposerLookahead.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/rewards/blockRewards.d.ts +2 -1
- package/lib/rewards/blockRewards.d.ts.map +1 -1
- package/lib/rewards/blockRewards.js +3 -2
- package/lib/rewards/blockRewards.js.map +1 -1
- package/lib/rewards/syncCommitteeRewards.d.ts.map +1 -1
- package/lib/rewards/syncCommitteeRewards.js +10 -11
- package/lib/rewards/syncCommitteeRewards.js.map +1 -1
- package/lib/signatureSets/blsToExecutionChange.d.ts +1 -2
- package/lib/signatureSets/blsToExecutionChange.d.ts.map +1 -1
- package/lib/signatureSets/blsToExecutionChange.js +2 -2
- package/lib/signatureSets/blsToExecutionChange.js.map +1 -1
- package/lib/types.d.ts +1 -1
- package/lib/types.d.ts.map +1 -1
- package/lib/util/electra.d.ts.map +1 -1
- package/lib/util/electra.js +1 -2
- package/lib/util/electra.js.map +1 -1
- package/lib/util/epochShuffling.d.ts +1 -34
- package/lib/util/epochShuffling.d.ts.map +1 -1
- package/lib/util/epochShuffling.js +1 -1
- package/lib/util/epochShuffling.js.map +1 -1
- package/lib/util/gloas.d.ts +43 -3
- package/lib/util/gloas.d.ts.map +1 -1
- package/lib/util/gloas.js +93 -5
- package/lib/util/gloas.js.map +1 -1
- package/lib/util/index.d.ts +1 -2
- package/lib/util/index.d.ts.map +1 -1
- package/lib/util/index.js +1 -2
- package/lib/util/index.js.map +1 -1
- package/lib/util/shuffling.d.ts +58 -0
- package/lib/util/shuffling.d.ts.map +1 -0
- package/lib/util/shuffling.js +175 -0
- package/lib/util/shuffling.js.map +1 -0
- package/lib/util/validator.d.ts +5 -0
- package/lib/util/validator.d.ts.map +1 -1
- package/lib/util/validator.js +25 -2
- package/lib/util/validator.js.map +1 -1
- package/package.json +7 -7
- package/src/block/index.ts +1 -0
- package/src/block/isValidIndexedAttestation.ts +17 -12
- package/src/block/processAttestationPhase0.ts +2 -1
- package/src/block/processAttesterSlashing.ts +16 -4
- package/src/block/processBlsToExecutionChange.ts +13 -14
- package/src/block/processDepositRequest.ts +101 -8
- package/src/block/processExecutionPayloadBid.ts +18 -40
- package/src/block/processExecutionPayloadEnvelope.ts +33 -29
- package/src/block/processOperations.ts +1 -1
- package/src/block/processProposerSlashing.ts +21 -11
- package/src/block/processVoluntaryExit.ts +59 -4
- package/src/block/processWithdrawals.ts +168 -70
- package/src/cache/epochCache.ts +52 -214
- package/src/cache/epochTransitionCache.ts +9 -34
- package/src/cache/stateCache.ts +1 -2
- package/src/epoch/processBuilderPendingPayments.ts +1 -5
- package/src/epoch/processProposerLookahead.ts +3 -7
- package/src/index.ts +0 -2
- package/src/rewards/blockRewards.ts +6 -3
- package/src/rewards/syncCommitteeRewards.ts +10 -13
- package/src/signatureSets/blsToExecutionChange.ts +2 -3
- package/src/types.ts +1 -0
- package/src/util/electra.ts +1 -4
- package/src/util/epochShuffling.ts +2 -43
- package/src/util/gloas.ts +109 -8
- package/src/util/index.ts +1 -2
- package/src/util/shuffling.ts +234 -0
- package/src/util/validator.ts +31 -1
- package/lib/util/calculateCommitteeAssignments.d.ts +0 -12
- package/lib/util/calculateCommitteeAssignments.d.ts.map +0 -1
- package/lib/util/calculateCommitteeAssignments.js +0 -26
- package/lib/util/calculateCommitteeAssignments.js.map +0 -1
- package/lib/util/shufflingDecisionRoot.d.ts +0 -20
- package/lib/util/shufflingDecisionRoot.d.ts.map +0 -1
- package/lib/util/shufflingDecisionRoot.js +0 -76
- package/lib/util/shufflingDecisionRoot.js.map +0 -1
- package/src/util/calculateCommitteeAssignments.ts +0 -43
- package/src/util/shufflingDecisionRoot.ts +0 -81
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { PublicKey, Signature, verify } from "@chainsafe/blst";
|
|
2
2
|
import { byteArrayEquals } from "@chainsafe/ssz";
|
|
3
|
-
import { DOMAIN_BEACON_BUILDER, SLOTS_PER_EPOCH, SLOTS_PER_HISTORICAL_ROOT } from "@lodestar/params";
|
|
3
|
+
import { BUILDER_INDEX_SELF_BUILD, DOMAIN_BEACON_BUILDER, SLOTS_PER_EPOCH, SLOTS_PER_HISTORICAL_ROOT, } from "@lodestar/params";
|
|
4
4
|
import { ssz } from "@lodestar/types";
|
|
5
5
|
import { toHex, toRootHex } from "@lodestar/utils";
|
|
6
|
-
import {
|
|
6
|
+
import { computeSigningRoot, computeTimeAtSlot } from "../util/index.js";
|
|
7
7
|
import { processConsolidationRequest } from "./processConsolidationRequest.js";
|
|
8
8
|
import { processDepositRequest } from "./processDepositRequest.js";
|
|
9
9
|
import { processWithdrawalRequest } from "./processWithdrawalRequest.js";
|
|
@@ -12,17 +12,13 @@ export function processExecutionPayloadEnvelope(state, signedEnvelope, verify) {
|
|
|
12
12
|
const envelope = signedEnvelope.message;
|
|
13
13
|
const payload = envelope.payload;
|
|
14
14
|
const fork = state.config.getForkSeq(envelope.slot);
|
|
15
|
-
if (verify) {
|
|
16
|
-
|
|
17
|
-
const pubkey = state.validators.getReadonly(builderIndex).pubkey;
|
|
18
|
-
if (!verifyExecutionPayloadEnvelopeSignature(state, pubkey, signedEnvelope)) {
|
|
19
|
-
throw new Error("Payload Envelope has invalid signature");
|
|
20
|
-
}
|
|
15
|
+
if (verify && !verifyExecutionPayloadEnvelopeSignature(state, signedEnvelope)) {
|
|
16
|
+
throw Error(`Execution payload envelope has invalid signature builderIndex=${envelope.builderIndex}`);
|
|
21
17
|
}
|
|
22
18
|
validateExecutionPayloadEnvelope(state, envelope);
|
|
23
19
|
const requests = envelope.executionRequests;
|
|
24
20
|
for (const deposit of requests.deposits) {
|
|
25
|
-
processDepositRequest(state, deposit);
|
|
21
|
+
processDepositRequest(fork, state, deposit);
|
|
26
22
|
}
|
|
27
23
|
for (const withdrawal of requests.withdrawals) {
|
|
28
24
|
processWithdrawalRequest(fork, state, withdrawal);
|
|
@@ -35,8 +31,6 @@ export function processExecutionPayloadEnvelope(state, signedEnvelope, verify) {
|
|
|
35
31
|
const payment = state.builderPendingPayments.get(paymentIndex).clone();
|
|
36
32
|
const amount = payment.withdrawal.amount;
|
|
37
33
|
if (amount > 0) {
|
|
38
|
-
const exitQueueEpoch = computeExitEpochAndUpdateChurn(state, BigInt(amount));
|
|
39
|
-
payment.withdrawal.withdrawableEpoch = exitQueueEpoch + state.config.MIN_VALIDATOR_WITHDRAWABILITY_DELAY;
|
|
40
34
|
state.builderPendingWithdrawals.push(payment.withdrawal);
|
|
41
35
|
}
|
|
42
36
|
state.builderPendingPayments.set(paymentIndex, ssz.gloas.BuilderPendingPayment.defaultViewDU());
|
|
@@ -49,6 +43,7 @@ export function processExecutionPayloadEnvelope(state, signedEnvelope, verify) {
|
|
|
49
43
|
}
|
|
50
44
|
function validateExecutionPayloadEnvelope(state, envelope) {
|
|
51
45
|
const payload = envelope.payload;
|
|
46
|
+
// Cache latest block header state root
|
|
52
47
|
if (byteArrayEquals(state.latestBlockHeader.stateRoot, ssz.Root.defaultValue())) {
|
|
53
48
|
const previousStateRoot = state.hashTreeRoot();
|
|
54
49
|
state.latestBlockHeader.stateRoot = previousStateRoot;
|
|
@@ -57,24 +52,26 @@ function validateExecutionPayloadEnvelope(state, envelope) {
|
|
|
57
52
|
if (!byteArrayEquals(envelope.beaconBlockRoot, state.latestBlockHeader.hashTreeRoot())) {
|
|
58
53
|
throw new Error(`Envelope's block is not the latest block header envelope=${toRootHex(envelope.beaconBlockRoot)} latestBlockHeader=${toRootHex(state.latestBlockHeader.hashTreeRoot())}`);
|
|
59
54
|
}
|
|
60
|
-
// Verify consistency with the beacon block
|
|
61
55
|
if (envelope.slot !== state.slot) {
|
|
62
56
|
throw new Error(`Slot mismatch between envelope and state envelope=${envelope.slot} state=${state.slot}`);
|
|
63
57
|
}
|
|
64
|
-
const committedBid = state.latestExecutionPayloadBid;
|
|
65
58
|
// Verify consistency with the committed bid
|
|
59
|
+
const committedBid = state.latestExecutionPayloadBid;
|
|
66
60
|
if (envelope.builderIndex !== committedBid.builderIndex) {
|
|
67
61
|
throw new Error(`Builder index mismatch between envelope and committed bid envelope=${envelope.builderIndex} committedBid=${committedBid.builderIndex}`);
|
|
68
62
|
}
|
|
69
|
-
// Verify consistency with the committed bid
|
|
70
63
|
const envelopeKzgRoot = ssz.deneb.BlobKzgCommitments.hashTreeRoot(envelope.blobKzgCommitments);
|
|
71
64
|
if (!byteArrayEquals(committedBid.blobKzgCommitmentsRoot, envelopeKzgRoot)) {
|
|
72
65
|
throw new Error(`Kzg commitment root mismatch between envelope and committed bid envelope=${toRootHex(envelopeKzgRoot)} committedBid=${toRootHex(committedBid.blobKzgCommitmentsRoot)}`);
|
|
73
66
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
67
|
+
if (!byteArrayEquals(committedBid.prevRandao, payload.prevRandao)) {
|
|
68
|
+
throw new Error(`Prev randao mismatch between committed bid and payload committedBid=${toHex(committedBid.prevRandao)} payload=${toHex(payload.prevRandao)}`);
|
|
69
|
+
}
|
|
70
|
+
// Verify consistency with expected withdrawals
|
|
71
|
+
const payloadWithdrawalsRoot = ssz.capella.Withdrawals.hashTreeRoot(payload.withdrawals);
|
|
72
|
+
const expectedWithdrawalsRoot = state.payloadExpectedWithdrawals.hashTreeRoot();
|
|
73
|
+
if (!byteArrayEquals(payloadWithdrawalsRoot, expectedWithdrawalsRoot)) {
|
|
74
|
+
throw new Error(`Withdrawals mismatch between payload and expected withdrawals payload=${toRootHex(payloadWithdrawalsRoot)} expected=${toRootHex(expectedWithdrawalsRoot)}`);
|
|
78
75
|
}
|
|
79
76
|
// Verify the gas_limit
|
|
80
77
|
if (Number(committedBid.gasLimit) !== payload.gasLimit) {
|
|
@@ -88,10 +85,6 @@ function validateExecutionPayloadEnvelope(state, envelope) {
|
|
|
88
85
|
if (!byteArrayEquals(payload.parentHash, state.latestBlockHash)) {
|
|
89
86
|
throw new Error(`Parent hash mismatch between envelope's payload and state envelope=${toRootHex(payload.parentHash)} state=${toRootHex(state.latestBlockHash)}`);
|
|
90
87
|
}
|
|
91
|
-
// Verify prev_randao matches committed bid
|
|
92
|
-
if (!byteArrayEquals(committedBid.prevRandao, payload.prevRandao)) {
|
|
93
|
-
throw new Error(`Prev randao mismatch between committed bid and payload committedBid=${toHex(committedBid.prevRandao)} payload=${toHex(payload.prevRandao)}`);
|
|
94
|
-
}
|
|
95
88
|
// Verify timestamp
|
|
96
89
|
if (payload.timestamp !== computeTimeAtSlot(state.config, state.slot, state.genesisTime)) {
|
|
97
90
|
throw new Error(`Timestamp mismatch between envelope's payload and state envelope=${payload.timestamp} state=${computeTimeAtSlot(state.config, state.slot, state.genesisTime)}`);
|
|
@@ -103,11 +96,19 @@ function validateExecutionPayloadEnvelope(state, envelope) {
|
|
|
103
96
|
}
|
|
104
97
|
// Skipped: Verify the execution payload is valid
|
|
105
98
|
}
|
|
106
|
-
function verifyExecutionPayloadEnvelopeSignature(state,
|
|
99
|
+
function verifyExecutionPayloadEnvelopeSignature(state, signedEnvelope) {
|
|
100
|
+
const builderIndex = signedEnvelope.message.builderIndex;
|
|
107
101
|
const domain = state.config.getDomain(state.slot, DOMAIN_BEACON_BUILDER);
|
|
108
102
|
const signingRoot = computeSigningRoot(ssz.gloas.ExecutionPayloadEnvelope, signedEnvelope.message, domain);
|
|
109
103
|
try {
|
|
110
|
-
|
|
104
|
+
let publicKey;
|
|
105
|
+
if (builderIndex === BUILDER_INDEX_SELF_BUILD) {
|
|
106
|
+
const validatorIndex = state.latestBlockHeader.proposerIndex;
|
|
107
|
+
publicKey = state.epochCtx.index2pubkey[validatorIndex];
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
publicKey = PublicKey.fromBytes(state.builders.getReadonly(builderIndex).pubkey);
|
|
111
|
+
}
|
|
111
112
|
const signature = Signature.fromBytes(signedEnvelope.signature, true);
|
|
112
113
|
return verify(signingRoot, publicKey, signature);
|
|
113
114
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processExecutionPayloadEnvelope.js","sourceRoot":"","sources":["../../src/block/processExecutionPayloadEnvelope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAC/C,OAAO,
|
|
1
|
+
{"version":3,"file":"processExecutionPayloadEnvelope.js","sourceRoot":"","sources":["../../src/block/processExecutionPayloadEnvelope.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,7 +39,7 @@ export function processOperations(fork, state, body, opts = { verifySignatures:
|
|
|
39
39
|
const stateElectra = state;
|
|
40
40
|
const bodyElectra = body;
|
|
41
41
|
for (const depositRequest of bodyElectra.executionRequests.deposits) {
|
|
42
|
-
processDepositRequest(stateElectra, depositRequest);
|
|
42
|
+
processDepositRequest(fork, stateElectra, depositRequest);
|
|
43
43
|
}
|
|
44
44
|
for (const elWithdrawalRequest of bodyElectra.executionRequests.withdrawals) {
|
|
45
45
|
processWithdrawalRequest(fork, stateElectra, elWithdrawalRequest);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processOperations.js","sourceRoot":"","sources":["../../src/block/processOperations.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"processOperations.js","sourceRoot":"","sources":["../../src/block/processOperations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
import { BeaconConfig } from "@lodestar/config";
|
|
1
2
|
import { ForkSeq } from "@lodestar/params";
|
|
2
|
-
import { phase0 } from "@lodestar/types";
|
|
3
|
+
import { Slot, phase0 } from "@lodestar/types";
|
|
4
|
+
import { Validator } from "@lodestar/types/phase0";
|
|
5
|
+
import { Index2PubkeyCache } from "../cache/pubkeyCache.js";
|
|
3
6
|
import { CachedBeaconStateAllForks } from "../types.js";
|
|
4
7
|
/**
|
|
5
8
|
* Process a ProposerSlashing operation. Initiates the exit of a validator, decreases the balance of the slashed
|
|
@@ -8,5 +11,5 @@ import { CachedBeaconStateAllForks } from "../types.js";
|
|
|
8
11
|
* PERF: Work depends on number of ProposerSlashing per block. On regular networks the average is 0 / block.
|
|
9
12
|
*/
|
|
10
13
|
export declare function processProposerSlashing(fork: ForkSeq, state: CachedBeaconStateAllForks, proposerSlashing: phase0.ProposerSlashing, verifySignatures?: boolean): void;
|
|
11
|
-
export declare function assertValidProposerSlashing(
|
|
14
|
+
export declare function assertValidProposerSlashing(config: BeaconConfig, index2pubkey: Index2PubkeyCache, stateSlot: Slot, proposerSlashing: phase0.ProposerSlashing, proposer: Validator, verifySignatures?: boolean): void;
|
|
12
15
|
//# sourceMappingURL=processProposerSlashing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processProposerSlashing.d.ts","sourceRoot":"","sources":["../../src/block/processProposerSlashing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAkB,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAC,MAAM,EAAM,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"processProposerSlashing.d.ts","sourceRoot":"","sources":["../../src/block/processProposerSlashing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAC,OAAO,EAAkB,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAC,IAAI,EAAE,MAAM,EAAM,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAC,SAAS,EAAC,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAC,iBAAiB,EAAC,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAC,yBAAyB,EAAyB,MAAM,aAAa,CAAC;AAK9E;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,yBAAyB,EAChC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EACzC,gBAAgB,UAAO,GACtB,IAAI,CAiCN;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,iBAAiB,EAC/B,SAAS,EAAE,IAAI,EACf,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EACzC,QAAQ,EAAE,SAAS,EACnB,gBAAgB,UAAO,GACtB,IAAI,CAqCN"}
|
|
@@ -11,7 +11,8 @@ import { slashValidator } from "./slashValidator.js";
|
|
|
11
11
|
* PERF: Work depends on number of ProposerSlashing per block. On regular networks the average is 0 / block.
|
|
12
12
|
*/
|
|
13
13
|
export function processProposerSlashing(fork, state, proposerSlashing, verifySignatures = true) {
|
|
14
|
-
|
|
14
|
+
const proposer = state.validators.getReadonly(proposerSlashing.signedHeader1.message.proposerIndex);
|
|
15
|
+
assertValidProposerSlashing(state.config, state.epochCtx.index2pubkey, state.slot, proposerSlashing, proposer, verifySignatures);
|
|
15
16
|
if (fork >= ForkSeq.gloas) {
|
|
16
17
|
const slot = Number(proposerSlashing.signedHeader1.message.slot);
|
|
17
18
|
const proposalEpoch = computeEpochAtSlot(slot);
|
|
@@ -28,7 +29,7 @@ export function processProposerSlashing(fork, state, proposerSlashing, verifySig
|
|
|
28
29
|
}
|
|
29
30
|
slashValidator(fork, state, proposerSlashing.signedHeader1.message.proposerIndex);
|
|
30
31
|
}
|
|
31
|
-
export function assertValidProposerSlashing(
|
|
32
|
+
export function assertValidProposerSlashing(config, index2pubkey, stateSlot, proposerSlashing, proposer, verifySignatures = true) {
|
|
32
33
|
const header1 = proposerSlashing.signedHeader1.message;
|
|
33
34
|
const header2 = proposerSlashing.signedHeader2.message;
|
|
34
35
|
// verify header slots match
|
|
@@ -44,13 +45,14 @@ export function assertValidProposerSlashing(state, proposerSlashing, verifySigna
|
|
|
44
45
|
throw new Error("ProposerSlashing headers are equal");
|
|
45
46
|
}
|
|
46
47
|
// verify the proposer is slashable
|
|
47
|
-
|
|
48
|
-
|
|
48
|
+
// ideally we would get the proposer from state.validators using proposerIndex but that requires access to state
|
|
49
|
+
// instead of that we pass in the proposer directly from the consumer side
|
|
50
|
+
if (!isSlashableValidator(proposer, computeEpochAtSlot(stateSlot))) {
|
|
49
51
|
throw new Error("ProposerSlashing proposer is not slashable");
|
|
50
52
|
}
|
|
51
53
|
// verify signatures
|
|
52
54
|
if (verifySignatures) {
|
|
53
|
-
const signatureSets = getProposerSlashingSignatureSets(
|
|
55
|
+
const signatureSets = getProposerSlashingSignatureSets(config, index2pubkey, stateSlot, proposerSlashing);
|
|
54
56
|
for (let i = 0; i < signatureSets.length; i++) {
|
|
55
57
|
if (!verifySignatureSet(signatureSets[i])) {
|
|
56
58
|
throw new Error(`ProposerSlashing header${i + 1} signature invalid`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processProposerSlashing.js","sourceRoot":"","sources":["../../src/block/processProposerSlashing.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"processProposerSlashing.js","sourceRoot":"","sources":["../../src/block/processProposerSlashing.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAE,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAe,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAGlD,OAAO,EAAC,gCAAgC,EAAC,MAAM,2BAA2B,CAAC;AAE3E,OAAO,EAAC,kBAAkB,EAAE,oBAAoB,EAAC,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAC,kBAAkB,EAAC,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAC,cAAc,EAAC,MAAM,qBAAqB,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,IAAa,EACb,KAAgC,EAChC,gBAAyC,EACzC,gBAAgB,GAAG,IAAI;IAEvB,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACpG,2BAA2B,CACzB,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,QAAQ,CAAC,YAAY,EAC3B,KAAK,CAAC,IAAI,EACV,gBAAgB,EAChB,QAAQ,EACR,gBAAgB,CACjB,CAAC;IAEF,IAAI,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACjE,MAAM,aAAa,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC1C,MAAM,aAAa,GAAG,YAAY,GAAG,CAAC,CAAC;QAEvC,MAAM,YAAY,GAChB,aAAa,KAAK,YAAY;YAC5B,CAAC,CAAC,eAAe,GAAG,CAAC,IAAI,GAAG,eAAe,CAAC;YAC5C,CAAC,CAAC,aAAa,KAAK,aAAa;gBAC/B,CAAC,CAAC,IAAI,GAAG,eAAe;gBACxB,CAAC,CAAC,SAAS,CAAC;QAElB,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC9B,KAAgC,CAAC,sBAAsB,CAAC,GAAG,CAC1D,YAAY,EACZ,GAAG,CAAC,KAAK,CAAC,qBAAqB,CAAC,aAAa,EAAE,CAChD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,MAAoB,EACpB,YAA+B,EAC/B,SAAe,EACf,gBAAyC,EACzC,QAAmB,EACnB,gBAAgB,GAAG,IAAI;IAEvB,MAAM,OAAO,GAAG,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC;IACvD,MAAM,OAAO,GAAG,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC;IAEvD,4BAA4B;IAC5B,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,8CAA8C,OAAO,CAAC,IAAI,UAAU,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACtG,CAAC;IAED,uCAAuC;IACvC,IAAI,OAAO,CAAC,aAAa,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CACb,kEAAkE,OAAO,CAAC,aAAa,mBAAmB,OAAO,CAAC,aAAa,EAAE,CAClI,CAAC;IACJ,CAAC;IAED,+BAA+B;IAC/B,IAAI,GAAG,CAAC,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,mCAAmC;IACnC,gHAAgH;IAChH,0EAA0E;IAC1E,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,oBAAoB;IACpB,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,aAAa,GAAG,gCAAgC,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;QAC1G,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -11,7 +11,7 @@ export declare enum VoluntaryExitValidity {
|
|
|
11
11
|
invalidSignature = "invalid_signature"
|
|
12
12
|
}
|
|
13
13
|
/**
|
|
14
|
-
* Process a VoluntaryExit operation. Initiates the exit of a validator.
|
|
14
|
+
* Process a VoluntaryExit operation. Initiates the exit of a validator or builder.
|
|
15
15
|
*
|
|
16
16
|
* PERF: Work depends on number of VoluntaryExit per block. On regular networks the average is 0 / block.
|
|
17
17
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processVoluntaryExit.d.ts","sourceRoot":"","sources":["../../src/block/processVoluntaryExit.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"processVoluntaryExit.d.ts","sourceRoot":"","sources":["../../src/block/processVoluntaryExit.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,OAAO,EAAC,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAC,MAAM,EAAM,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAC,yBAAyB,EAAmD,MAAM,aAAa,CAAC;AAWxG,oBAAY,qBAAqB;IAC/B,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,aAAa,mBAAmB;IAChC,UAAU,gBAAgB;IAC1B,eAAe,sBAAsB;IACrC,kBAAkB,wBAAwB;IAC1C,gBAAgB,sBAAsB;CACvC;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,yBAAyB,EAChC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,EAC/C,eAAe,UAAO,GACrB,IAAI,CAuDN;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,yBAAyB,EAChC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,EAC/C,eAAe,UAAO,GACrB,qBAAqB,CA0CvB;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,yBAAyB,EAChC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,EAC/C,eAAe,UAAO,GACrB,OAAO,CAET"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import { PublicKey, Signature, verify } from "@chainsafe/blst";
|
|
1
2
|
import { FAR_FUTURE_EPOCH, ForkSeq } from "@lodestar/params";
|
|
3
|
+
import { ssz } from "@lodestar/types";
|
|
2
4
|
import { verifyVoluntaryExitSignature } from "../signatureSets/index.js";
|
|
3
|
-
import {
|
|
5
|
+
import { convertValidatorIndexToBuilderIndex, getPendingBalanceToWithdrawForBuilder, initiateBuilderExit, isActiveBuilder, isBuilderIndex, } from "../util/gloas.js";
|
|
6
|
+
import { computeSigningRoot, getCurrentEpoch, getPendingBalanceToWithdraw, isActiveValidator } from "../util/index.js";
|
|
4
7
|
import { initiateValidatorExit } from "./index.js";
|
|
5
8
|
export var VoluntaryExitValidity;
|
|
6
9
|
(function (VoluntaryExitValidity) {
|
|
@@ -13,11 +16,50 @@ export var VoluntaryExitValidity;
|
|
|
13
16
|
VoluntaryExitValidity["invalidSignature"] = "invalid_signature";
|
|
14
17
|
})(VoluntaryExitValidity || (VoluntaryExitValidity = {}));
|
|
15
18
|
/**
|
|
16
|
-
* Process a VoluntaryExit operation. Initiates the exit of a validator.
|
|
19
|
+
* Process a VoluntaryExit operation. Initiates the exit of a validator or builder.
|
|
17
20
|
*
|
|
18
21
|
* PERF: Work depends on number of VoluntaryExit per block. On regular networks the average is 0 / block.
|
|
19
22
|
*/
|
|
20
23
|
export function processVoluntaryExit(fork, state, signedVoluntaryExit, verifySignature = true) {
|
|
24
|
+
const voluntaryExit = signedVoluntaryExit.message;
|
|
25
|
+
const currentEpoch = getCurrentEpoch(state);
|
|
26
|
+
// Exits must specify an epoch when they become valid; they are not valid before then
|
|
27
|
+
if (currentEpoch < voluntaryExit.epoch) {
|
|
28
|
+
throw Error(`Voluntary exit epoch ${voluntaryExit.epoch} is after current epoch ${currentEpoch}`);
|
|
29
|
+
}
|
|
30
|
+
// Check if this is a builder exit
|
|
31
|
+
if (fork >= ForkSeq.gloas && isBuilderIndex(voluntaryExit.validatorIndex)) {
|
|
32
|
+
const stateGloas = state;
|
|
33
|
+
const builderIndex = convertValidatorIndexToBuilderIndex(voluntaryExit.validatorIndex);
|
|
34
|
+
const builder = stateGloas.builders.getReadonly(builderIndex);
|
|
35
|
+
// Verify the builder is active
|
|
36
|
+
if (!isActiveBuilder(stateGloas, builderIndex)) {
|
|
37
|
+
throw Error(`Builder ${builderIndex} is not active`);
|
|
38
|
+
}
|
|
39
|
+
// Only exit builder if it has no pending withdrawals in the queue
|
|
40
|
+
if (getPendingBalanceToWithdrawForBuilder(stateGloas, builderIndex) !== 0) {
|
|
41
|
+
throw Error(`Builder ${builderIndex} has pending withdrawals`);
|
|
42
|
+
}
|
|
43
|
+
// Verify signature
|
|
44
|
+
if (verifySignature) {
|
|
45
|
+
const domain = state.config.getDomainForVoluntaryExit(state.slot);
|
|
46
|
+
const signingRoot = computeSigningRoot(ssz.phase0.VoluntaryExit, voluntaryExit, domain);
|
|
47
|
+
try {
|
|
48
|
+
const publicKey = PublicKey.fromBytes(builder.pubkey);
|
|
49
|
+
const signature = Signature.fromBytes(signedVoluntaryExit.signature, true);
|
|
50
|
+
if (!verify(signingRoot, publicKey, signature)) {
|
|
51
|
+
throw Error("BLS verify failed");
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch (e) {
|
|
55
|
+
throw Error(`Builder ${builderIndex} invalid exit signature reason=${e.message}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Initiate builder exit
|
|
59
|
+
initiateBuilderExit(stateGloas, builderIndex);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
// Handle validator exit
|
|
21
63
|
const validity = getVoluntaryExitValidity(fork, state, signedVoluntaryExit, verifySignature);
|
|
22
64
|
if (validity !== VoluntaryExitValidity.valid) {
|
|
23
65
|
throw Error(`Invalid voluntary exit at forkSeq=${fork} reason=${validity}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processVoluntaryExit.js","sourceRoot":"","sources":["../../src/block/processVoluntaryExit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAE,OAAO,EAAC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"processVoluntaryExit.js","sourceRoot":"","sources":["../../src/block/processVoluntaryExit.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ export declare function getExpectedWithdrawals(fork: ForkSeq, state: CachedBeaco
|
|
|
6
6
|
expectedWithdrawals: capella.Withdrawal[];
|
|
7
7
|
processedBuilderWithdrawalsCount: number;
|
|
8
8
|
processedPartialWithdrawalsCount: number;
|
|
9
|
+
processedBuildersSweepCount: number;
|
|
9
10
|
processedValidatorSweepCount: number;
|
|
10
11
|
};
|
|
11
12
|
//# sourceMappingURL=processWithdrawals.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processWithdrawals.d.ts","sourceRoot":"","sources":["../../src/block/processWithdrawals.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,OAAO,
|
|
1
|
+
{"version":3,"file":"processWithdrawals.d.ts","sourceRoot":"","sources":["../../src/block/processWithdrawals.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,OAAO,EAOR,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAA+B,OAAO,EAAM,MAAM,iBAAiB,CAAC;AAE3E,OAAO,EAAC,wBAAwB,EAAE,wBAAwB,EAAE,sBAAsB,EAAC,MAAM,aAAa,CAAC;AAgBvG,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,wBAAwB,GAAG,wBAAwB,GAAG,sBAAsB,EACnF,OAAO,CAAC,EAAE,OAAO,CAAC,6BAA6B,GAC9C,IAAI,CA4FN;AA6QD,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,wBAAwB,GAAG,wBAAwB,GAAG,sBAAsB,GAClF;IACD,mBAAmB,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;IAC1C,gCAAgC,EAAE,MAAM,CAAC;IACzC,gCAAgC,EAAE,MAAM,CAAC;IACzC,2BAA2B,EAAE,MAAM,CAAC;IACpC,4BAA4B,EAAE,MAAM,CAAC;CACtC,CAuFA"}
|