@lodestar/state-transition 1.29.0-dev.8b43dbeef8 → 1.29.0-dev.8e915fe6fc
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 +2 -1
- package/lib/block/index.js +2 -2
- package/lib/block/index.js.map +1 -1
- package/lib/block/processAttestations.d.ts +2 -1
- package/lib/block/processAttestations.js +2 -2
- package/lib/block/processAttestations.js.map +1 -1
- package/lib/block/processAttestationsAltair.d.ts +2 -1
- package/lib/block/processAttestationsAltair.js +17 -8
- package/lib/block/processAttestationsAltair.js.map +1 -1
- package/lib/block/processOperations.d.ts +2 -1
- package/lib/block/processOperations.js +2 -2
- package/lib/block/processOperations.js.map +1 -1
- package/lib/block/processWithdrawals.js +15 -15
- package/lib/block/processWithdrawals.js.map +1 -1
- package/lib/metrics.d.ts +3 -2
- package/lib/metrics.js.map +1 -1
- package/lib/stateTransition.d.ts +11 -3
- package/lib/stateTransition.js +7 -7
- package/lib/stateTransition.js.map +1 -1
- package/package.json +6 -6
package/lib/block/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ForkSeq } from "@lodestar/params";
|
|
2
2
|
import { BeaconBlock, BlindedBeaconBlock } from "@lodestar/types";
|
|
3
|
+
import { BeaconStateTransitionMetrics } from "../metrics.js";
|
|
3
4
|
import { CachedBeaconStateAllForks } from "../types.js";
|
|
4
5
|
import { BlockExternalData } from "./externalData.js";
|
|
5
6
|
import { processBlockHeader } from "./processBlockHeader.js";
|
|
@@ -14,5 +15,5 @@ export * from "./processOperations.js";
|
|
|
14
15
|
export * from "./initiateValidatorExit.js";
|
|
15
16
|
export * from "./isValidIndexedAttestation.js";
|
|
16
17
|
export * from "./externalData.js";
|
|
17
|
-
export declare function processBlock(fork: ForkSeq, state: CachedBeaconStateAllForks, block: BeaconBlock | BlindedBeaconBlock, externalData: BlockExternalData & ProcessBlockOpts, opts?: ProcessBlockOpts): void;
|
|
18
|
+
export declare function processBlock(fork: ForkSeq, state: CachedBeaconStateAllForks, block: BeaconBlock | BlindedBeaconBlock, externalData: BlockExternalData & ProcessBlockOpts, opts?: ProcessBlockOpts, metrics?: BeaconStateTransitionMetrics | null): void;
|
|
18
19
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/block/index.js
CHANGED
|
@@ -15,7 +15,7 @@ export * from "./processOperations.js";
|
|
|
15
15
|
export * from "./initiateValidatorExit.js";
|
|
16
16
|
export * from "./isValidIndexedAttestation.js";
|
|
17
17
|
export * from "./externalData.js";
|
|
18
|
-
export function processBlock(fork, state, block, externalData, opts) {
|
|
18
|
+
export function processBlock(fork, state, block, externalData, opts, metrics) {
|
|
19
19
|
const { verifySignatures = true } = opts ?? {};
|
|
20
20
|
processBlockHeader(state, block);
|
|
21
21
|
// The call to the process_execution_payload must happen before the call to the process_randao as the former depends
|
|
@@ -31,7 +31,7 @@ export function processBlock(fork, state, block, externalData, opts) {
|
|
|
31
31
|
}
|
|
32
32
|
processRandao(state, block, verifySignatures);
|
|
33
33
|
processEth1Data(state, block.body.eth1Data);
|
|
34
|
-
processOperations(fork, state, block.body, opts);
|
|
34
|
+
processOperations(fork, state, block.body, opts, metrics);
|
|
35
35
|
if (fork >= ForkSeq.altair) {
|
|
36
36
|
processSyncAggregate(state, block, verifySignatures);
|
|
37
37
|
}
|
package/lib/block/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/block/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/block/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAC;AAIzC,OAAO,EAAC,uBAAuB,EAAE,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAoB,mBAAmB,EAAC,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAC,yBAAyB,EAAC,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAC,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAC,uBAAuB,EAAC,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAC,iBAAiB,EAAC,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAC,oBAAoB,EAAC,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAC,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AAG3D,aAAa;AACb,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,aAAa,EACb,eAAe,EACf,oBAAoB,EACpB,kBAAkB,GACnB,CAAC;AACF,cAAc,wBAAwB,CAAC;AAEvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mBAAmB,CAAC;AAElC,MAAM,UAAU,YAAY,CAC1B,IAAa,EACb,KAAgC,EAChC,KAAuC,EACvC,YAAkD,EAClD,IAAuB,EACvB,OAA6C;IAE7C,MAAM,EAAC,gBAAgB,GAAG,IAAI,EAAC,GAAG,IAAI,IAAI,EAAE,CAAC;IAE7C,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAEjC,oHAAoH;IACpH,oEAAoE;IACpE,IAAI,IAAI,IAAI,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC,KAAmC,EAAE,KAAK,CAAC,EAAE,CAAC;QAChG,MAAM,oBAAoB,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;QAC5D,+DAA+D;QAC/D,gJAAgJ;QAChJ,IAAI,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAC5B,kBAAkB,CAChB,IAAI,EACJ,KAAiC,EACjC,oBAA6D,CAC9D,CAAC;QACJ,CAAC;QAED,uBAAuB,CAAC,IAAI,EAAE,KAAmC,EAAE,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC/F,CAAC;IAED,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAC9C,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5C,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1D,IAAI,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QAC3B,oBAAoB,CAAC,KAAK,EAAE,KAA2B,EAAE,gBAAgB,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAC1B,yBAAyB,CAAC,YAAY,CAAC,CAAC;QACxC,4EAA4E;QAC5E,+BAA+B;QAC/B,IAAI,YAAY,CAAC,mBAAmB,KAAK,mBAAmB,CAAC,QAAQ,EAAE,CAAC;YACtE,MAAM,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { ForkSeq } from "@lodestar/params";
|
|
2
2
|
import { Attestation } from "@lodestar/types";
|
|
3
|
+
import { BeaconStateTransitionMetrics } from "../metrics.js";
|
|
3
4
|
import { CachedBeaconStateAllForks } from "../types.js";
|
|
4
5
|
/**
|
|
5
6
|
* TODO
|
|
6
7
|
*/
|
|
7
|
-
export declare function processAttestations(fork: ForkSeq, state: CachedBeaconStateAllForks, attestations: Attestation[], verifySignatures?: boolean): void;
|
|
8
|
+
export declare function processAttestations(fork: ForkSeq, state: CachedBeaconStateAllForks, attestations: Attestation[], verifySignatures?: boolean, metrics?: BeaconStateTransitionMetrics | null): void;
|
|
8
9
|
//# sourceMappingURL=processAttestations.d.ts.map
|
|
@@ -4,14 +4,14 @@ import { processAttestationsAltair } from "./processAttestationsAltair.js";
|
|
|
4
4
|
/**
|
|
5
5
|
* TODO
|
|
6
6
|
*/
|
|
7
|
-
export function processAttestations(fork, state, attestations, verifySignatures = true) {
|
|
7
|
+
export function processAttestations(fork, state, attestations, verifySignatures = true, metrics) {
|
|
8
8
|
if (fork === ForkSeq.phase0) {
|
|
9
9
|
for (const attestation of attestations) {
|
|
10
10
|
processAttestationPhase0(state, attestation, verifySignatures);
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
13
|
else {
|
|
14
|
-
processAttestationsAltair(fork, state, attestations, verifySignatures);
|
|
14
|
+
processAttestationsAltair(fork, state, attestations, verifySignatures, metrics);
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
//# sourceMappingURL=processAttestations.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processAttestations.js","sourceRoot":"","sources":["../../src/block/processAttestations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"processAttestations.js","sourceRoot":"","sources":["../../src/block/processAttestations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAC;AAIzC,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,EACvB,OAA6C;IAE7C,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,EAAE,OAAO,CAAC,CAAC;IAC7G,CAAC;AACH,CAAC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Attestation, Epoch, phase0 } from "@lodestar/types";
|
|
2
2
|
import { ForkSeq } from "@lodestar/params";
|
|
3
|
+
import { BeaconStateTransitionMetrics } from "../metrics.js";
|
|
3
4
|
import { CachedBeaconStateAltair } from "../types.js";
|
|
4
5
|
import { RootCache } from "../util/rootCache.js";
|
|
5
|
-
export declare function processAttestationsAltair(fork: ForkSeq, state: CachedBeaconStateAltair, attestations: Attestation[], verifySignature?: boolean): void;
|
|
6
|
+
export declare function processAttestationsAltair(fork: ForkSeq, state: CachedBeaconStateAltair, attestations: Attestation[], verifySignature?: boolean, metrics?: BeaconStateTransitionMetrics | null): void;
|
|
6
7
|
/**
|
|
7
8
|
* https://github.com/ethereum/consensus-specs/blob/v1.1.10/specs/altair/beacon-chain.md#get_attestation_participation_flag_indices
|
|
8
9
|
*/
|
|
@@ -11,7 +11,7 @@ const TIMELY_SOURCE = 1 << TIMELY_SOURCE_FLAG_INDEX;
|
|
|
11
11
|
const TIMELY_TARGET = 1 << TIMELY_TARGET_FLAG_INDEX;
|
|
12
12
|
const TIMELY_HEAD = 1 << TIMELY_HEAD_FLAG_INDEX;
|
|
13
13
|
const SLOTS_PER_EPOCH_SQRT = intSqrt(SLOTS_PER_EPOCH);
|
|
14
|
-
export function processAttestationsAltair(fork, state, attestations, verifySignature = true) {
|
|
14
|
+
export function processAttestationsAltair(fork, state, attestations, verifySignature = true, metrics) {
|
|
15
15
|
const { epochCtx } = state;
|
|
16
16
|
const { effectiveBalanceIncrements } = epochCtx;
|
|
17
17
|
const stateSlot = state.slot;
|
|
@@ -19,6 +19,8 @@ export function processAttestationsAltair(fork, state, attestations, verifySigna
|
|
|
19
19
|
const currentEpoch = epochCtx.epoch;
|
|
20
20
|
// Process all attestations first and then increase the balance of the proposer once
|
|
21
21
|
let proposerReward = 0;
|
|
22
|
+
let newSeenAttesters = 0;
|
|
23
|
+
let newSeenAttestersEffectiveBalance = 0;
|
|
22
24
|
for (const attestation of attestations) {
|
|
23
25
|
const data = attestation.data;
|
|
24
26
|
validateAttestation(fork, state, attestation);
|
|
@@ -40,16 +42,20 @@ export function processAttestationsAltair(fork, state, attestations, verifySigna
|
|
|
40
42
|
// In epoch processing, this participation info is used to calculate balance updates
|
|
41
43
|
let totalBalanceIncrementsWithWeight = 0;
|
|
42
44
|
const validators = state.validators;
|
|
43
|
-
for (const
|
|
44
|
-
const flags = epochParticipation.get(
|
|
45
|
+
for (const validatorIndex of attestingIndices) {
|
|
46
|
+
const flags = epochParticipation.get(validatorIndex);
|
|
45
47
|
// For normal block, > 90% of attestations belong to current epoch
|
|
46
48
|
// At epoch boundary, 100% of attestations belong to previous epoch
|
|
47
49
|
// so we want to update the participation flag tree in batch
|
|
48
50
|
// Note ParticipationFlags type uses option {setBitwiseOR: true}, .set() does a |= operation
|
|
49
|
-
epochParticipation.set(
|
|
51
|
+
epochParticipation.set(validatorIndex, flagsAttestation);
|
|
50
52
|
// epochParticipation.setStatus(index, newStatus);
|
|
51
53
|
// Returns flags that are NOT set before (~ bitwise NOT) AND are set after
|
|
52
54
|
const flagsNewSet = ~flags & flagsAttestation;
|
|
55
|
+
if (flagsNewSet !== 0) {
|
|
56
|
+
newSeenAttesters++;
|
|
57
|
+
newSeenAttestersEffectiveBalance += effectiveBalanceIncrements[validatorIndex];
|
|
58
|
+
}
|
|
53
59
|
// Spec:
|
|
54
60
|
// baseReward = state.validators[index].effectiveBalance / EFFECTIVE_BALANCE_INCREMENT * baseRewardPerIncrement;
|
|
55
61
|
// proposerRewardNumerator += baseReward * totalWeight
|
|
@@ -61,18 +67,18 @@ export function processAttestationsAltair(fork, state, attestations, verifySigna
|
|
|
61
67
|
if ((flagsNewSet & TIMELY_HEAD) === TIMELY_HEAD)
|
|
62
68
|
totalWeight += TIMELY_HEAD_WEIGHT;
|
|
63
69
|
if (totalWeight > 0) {
|
|
64
|
-
totalBalanceIncrementsWithWeight += effectiveBalanceIncrements[
|
|
70
|
+
totalBalanceIncrementsWithWeight += effectiveBalanceIncrements[validatorIndex] * totalWeight;
|
|
65
71
|
}
|
|
66
72
|
// TODO: describe issue. Compute progressive target balances
|
|
67
73
|
// When processing each attestation, increase the cummulative target balance. Only applies post-altair
|
|
68
74
|
if ((flagsNewSet & TIMELY_TARGET) === TIMELY_TARGET) {
|
|
69
|
-
const validator = validators.getReadonly(
|
|
75
|
+
const validator = validators.getReadonly(validatorIndex);
|
|
70
76
|
if (!validator.slashed) {
|
|
71
77
|
if (inCurrentEpoch) {
|
|
72
|
-
epochCtx.currentTargetUnslashedBalanceIncrements += effectiveBalanceIncrements[
|
|
78
|
+
epochCtx.currentTargetUnslashedBalanceIncrements += effectiveBalanceIncrements[validatorIndex];
|
|
73
79
|
}
|
|
74
80
|
else {
|
|
75
|
-
epochCtx.previousTargetUnslashedBalanceIncrements += effectiveBalanceIncrements[
|
|
81
|
+
epochCtx.previousTargetUnslashedBalanceIncrements += effectiveBalanceIncrements[validatorIndex];
|
|
76
82
|
}
|
|
77
83
|
}
|
|
78
84
|
}
|
|
@@ -82,6 +88,9 @@ export function processAttestationsAltair(fork, state, attestations, verifySigna
|
|
|
82
88
|
const proposerRewardNumerator = totalIncrements * state.epochCtx.baseRewardPerIncrement;
|
|
83
89
|
proposerReward += Math.floor(proposerRewardNumerator / PROPOSER_REWARD_DOMINATOR);
|
|
84
90
|
}
|
|
91
|
+
metrics?.newSeenAttestersPerBlock.set(newSeenAttesters);
|
|
92
|
+
metrics?.newSeenAttestersEffectiveBalancePerBlock.set(newSeenAttestersEffectiveBalance);
|
|
93
|
+
metrics?.attestationsPerBlock.set(attestations.length);
|
|
85
94
|
increaseBalance(state, epochCtx.getBeaconProposer(state.slot), proposerReward);
|
|
86
95
|
state.proposerRewards.attestations = proposerReward;
|
|
87
96
|
}
|
|
@@ -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,EAEL,+BAA+B,EAC/B,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"processAttestationsAltair.js","sourceRoot":"","sources":["../../src/block/processAttestationsAltair.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ForkSeq } from "@lodestar/params";
|
|
2
2
|
import { BeaconBlockBody } from "@lodestar/types";
|
|
3
|
+
import { BeaconStateTransitionMetrics } from "../metrics.js";
|
|
3
4
|
import { CachedBeaconStateAllForks } from "../types.js";
|
|
4
5
|
import { processAttestations } from "./processAttestations.js";
|
|
5
6
|
import { processAttesterSlashing } from "./processAttesterSlashing.js";
|
|
@@ -12,5 +13,5 @@ import { processVoluntaryExit } from "./processVoluntaryExit.js";
|
|
|
12
13
|
import { processWithdrawalRequest } from "./processWithdrawalRequest.js";
|
|
13
14
|
import { ProcessBlockOpts } from "./types.js";
|
|
14
15
|
export { processProposerSlashing, processAttesterSlashing, processAttestations, processDeposit, processVoluntaryExit, processWithdrawalRequest, processBlsToExecutionChange, processDepositRequest, processConsolidationRequest, };
|
|
15
|
-
export declare function processOperations(fork: ForkSeq, state: CachedBeaconStateAllForks, body: BeaconBlockBody, opts?: ProcessBlockOpts): void;
|
|
16
|
+
export declare function processOperations(fork: ForkSeq, state: CachedBeaconStateAllForks, body: BeaconBlockBody, opts?: ProcessBlockOpts, metrics?: BeaconStateTransitionMetrics | null): void;
|
|
16
17
|
//# sourceMappingURL=processOperations.d.ts.map
|
|
@@ -10,7 +10,7 @@ import { processProposerSlashing } from "./processProposerSlashing.js";
|
|
|
10
10
|
import { processVoluntaryExit } from "./processVoluntaryExit.js";
|
|
11
11
|
import { processWithdrawalRequest } from "./processWithdrawalRequest.js";
|
|
12
12
|
export { processProposerSlashing, processAttesterSlashing, processAttestations, processDeposit, processVoluntaryExit, processWithdrawalRequest, processBlsToExecutionChange, processDepositRequest, processConsolidationRequest, };
|
|
13
|
-
export function processOperations(fork, state, body, opts = { verifySignatures: true }) {
|
|
13
|
+
export function processOperations(fork, state, body, opts = { verifySignatures: true }, metrics) {
|
|
14
14
|
// verify that outstanding deposits are processed up to the maximum number of deposits
|
|
15
15
|
const maxDeposits = getEth1DepositCount(state);
|
|
16
16
|
if (body.deposits.length !== maxDeposits) {
|
|
@@ -22,7 +22,7 @@ export function processOperations(fork, state, body, opts = { verifySignatures:
|
|
|
22
22
|
for (const attesterSlashing of body.attesterSlashings) {
|
|
23
23
|
processAttesterSlashing(fork, state, attesterSlashing, opts.verifySignatures);
|
|
24
24
|
}
|
|
25
|
-
processAttestations(fork, state, body.attestations, opts.verifySignatures);
|
|
25
|
+
processAttestations(fork, state, body.attestations, opts.verifySignatures, metrics);
|
|
26
26
|
for (const deposit of body.deposits) {
|
|
27
27
|
processDeposit(fork, state, deposit);
|
|
28
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processOperations.js","sourceRoot":"","sources":["../../src/block/processOperations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"processOperations.js","sourceRoot":"","sources":["../../src/block/processOperations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { byteArrayEquals } from "@chainsafe/ssz";
|
|
2
2
|
import { FAR_FUTURE_EPOCH, ForkSeq, MAX_EFFECTIVE_BALANCE, MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP, MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP, MAX_WITHDRAWALS_PER_PAYLOAD, MIN_ACTIVATION_BALANCE, } from "@lodestar/params";
|
|
3
3
|
import { ssz } from "@lodestar/types";
|
|
4
|
-
import { toRootHex } from "@lodestar/utils";
|
|
4
|
+
import { MapDef, toRootHex } from "@lodestar/utils";
|
|
5
5
|
import { decreaseBalance, getMaxEffectiveBalance, hasEth1WithdrawalCredential, hasExecutionWithdrawalCredential, isCapellaPayloadHeader, } from "../util/index.js";
|
|
6
6
|
export function processWithdrawals(fork, state, payload) {
|
|
7
7
|
// processedPartialWithdrawalsCount is withdrawals coming from EL since electra (EIP-7002)
|
|
@@ -58,6 +58,7 @@ export function getExpectedWithdrawals(fork, state) {
|
|
|
58
58
|
let withdrawalIndex = state.nextWithdrawalIndex;
|
|
59
59
|
const { validators, balances, nextWithdrawalValidatorIndex } = state;
|
|
60
60
|
const withdrawals = [];
|
|
61
|
+
const withdrawnBalances = new MapDef(() => 0);
|
|
61
62
|
const isPostElectra = fork >= ForkSeq.electra;
|
|
62
63
|
// partialWithdrawalsCount is withdrawals coming from EL since electra (EIP-7002)
|
|
63
64
|
let processedPartialWithdrawalsCount = 0;
|
|
@@ -78,10 +79,12 @@ export function getExpectedWithdrawals(fork, state) {
|
|
|
78
79
|
break;
|
|
79
80
|
}
|
|
80
81
|
const validator = validators.getReadonly(withdrawal.validatorIndex);
|
|
82
|
+
const totalWithdrawn = withdrawnBalances.getOrDefault(withdrawal.validatorIndex);
|
|
83
|
+
const balance = state.balances.get(withdrawal.validatorIndex) - totalWithdrawn;
|
|
81
84
|
if (validator.exitEpoch === FAR_FUTURE_EPOCH &&
|
|
82
85
|
validator.effectiveBalance >= MIN_ACTIVATION_BALANCE &&
|
|
83
|
-
|
|
84
|
-
const balanceOverMinActivationBalance = BigInt(
|
|
86
|
+
balance > MIN_ACTIVATION_BALANCE) {
|
|
87
|
+
const balanceOverMinActivationBalance = BigInt(balance - MIN_ACTIVATION_BALANCE);
|
|
85
88
|
const withdrawableBalance = balanceOverMinActivationBalance < withdrawal.amount ? balanceOverMinActivationBalance : withdrawal.amount;
|
|
86
89
|
withdrawals.push({
|
|
87
90
|
index: withdrawalIndex,
|
|
@@ -90,6 +93,7 @@ export function getExpectedWithdrawals(fork, state) {
|
|
|
90
93
|
amount: withdrawableBalance,
|
|
91
94
|
});
|
|
92
95
|
withdrawalIndex++;
|
|
96
|
+
withdrawnBalances.set(withdrawal.validatorIndex, totalWithdrawn + Number(withdrawableBalance));
|
|
93
97
|
}
|
|
94
98
|
processedPartialWithdrawalsCount++;
|
|
95
99
|
}
|
|
@@ -102,14 +106,16 @@ export function getExpectedWithdrawals(fork, state) {
|
|
|
102
106
|
// Get next validator in turn
|
|
103
107
|
const validatorIndex = (nextWithdrawalValidatorIndex + n) % validators.length;
|
|
104
108
|
const validator = validators.getReadonly(validatorIndex);
|
|
109
|
+
const withdrawnBalance = withdrawnBalances.getOrDefault(validatorIndex);
|
|
105
110
|
const balance = isPostElectra
|
|
106
|
-
?
|
|
111
|
+
? // Deduct partially withdrawn balance already queued above
|
|
112
|
+
balances.get(validatorIndex) - withdrawnBalance
|
|
107
113
|
: balances.get(validatorIndex);
|
|
108
114
|
const { withdrawableEpoch, withdrawalCredentials, effectiveBalance } = validator;
|
|
109
115
|
const hasWithdrawableCredentials = isPostElectra
|
|
110
116
|
? hasExecutionWithdrawalCredential(withdrawalCredentials)
|
|
111
117
|
: hasEth1WithdrawalCredential(withdrawalCredentials);
|
|
112
|
-
// early skip for balance = 0 as its now more likely that validator has exited/
|
|
118
|
+
// early skip for balance = 0 as its now more likely that validator has exited/slashed with
|
|
113
119
|
// balance zero than not have withdrawal credentials set
|
|
114
120
|
if (balance === 0 || !hasWithdrawableCredentials) {
|
|
115
121
|
continue;
|
|
@@ -123,17 +129,20 @@ export function getExpectedWithdrawals(fork, state) {
|
|
|
123
129
|
amount: BigInt(balance),
|
|
124
130
|
});
|
|
125
131
|
withdrawalIndex++;
|
|
132
|
+
withdrawnBalances.set(validatorIndex, withdrawnBalance + balance);
|
|
126
133
|
}
|
|
127
134
|
else if (effectiveBalance === (isPostElectra ? getMaxEffectiveBalance(withdrawalCredentials) : MAX_EFFECTIVE_BALANCE) &&
|
|
128
135
|
balance > effectiveBalance) {
|
|
129
136
|
// capella partial withdrawal
|
|
137
|
+
const partialAmount = balance - effectiveBalance;
|
|
130
138
|
withdrawals.push({
|
|
131
139
|
index: withdrawalIndex,
|
|
132
140
|
validatorIndex,
|
|
133
141
|
address: validator.withdrawalCredentials.subarray(12),
|
|
134
|
-
amount: BigInt(
|
|
142
|
+
amount: BigInt(partialAmount),
|
|
135
143
|
});
|
|
136
144
|
withdrawalIndex++;
|
|
145
|
+
withdrawnBalances.set(validatorIndex, withdrawnBalance + partialAmount);
|
|
137
146
|
}
|
|
138
147
|
// Break if we have enough to pack the block
|
|
139
148
|
if (withdrawals.length >= MAX_WITHDRAWALS_PER_PAYLOAD) {
|
|
@@ -142,13 +151,4 @@ export function getExpectedWithdrawals(fork, state) {
|
|
|
142
151
|
}
|
|
143
152
|
return { withdrawals, sampledValidators: n, processedPartialWithdrawalsCount };
|
|
144
153
|
}
|
|
145
|
-
function getPartiallyWithdrawnBalance(withdrawals, validatorIndex) {
|
|
146
|
-
let total = BigInt(0);
|
|
147
|
-
for (const withdrawal of withdrawals) {
|
|
148
|
-
if (withdrawal.validatorIndex === validatorIndex) {
|
|
149
|
-
total += withdrawal.amount;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
return Number(total);
|
|
153
|
-
}
|
|
154
154
|
//# sourceMappingURL=processWithdrawals.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processWithdrawals.js","sourceRoot":"","sources":["../../src/block/processWithdrawals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EACL,gBAAgB,EAChB,OAAO,EACP,qBAAqB,EACrB,0CAA0C,EAC1C,oCAAoC,EACpC,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAA0B,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"processWithdrawals.js","sourceRoot":"","sources":["../../src/block/processWithdrawals.ts"],"names":[],"mappings":"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"}
|
package/lib/metrics.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { Epoch } from "@lodestar/types";
|
|
2
1
|
import { Gauge, Histogram } from "@lodestar/utils";
|
|
3
2
|
import { EpochTransitionStep } from "./epoch/index.js";
|
|
4
3
|
import { StateCloneSource, StateHashTreeRootSource } from "./stateTransition.js";
|
|
@@ -32,7 +31,9 @@ export type BeaconStateTransitionMetrics = {
|
|
|
32
31
|
postStateBalancesNodesPopulatedHit: Gauge;
|
|
33
32
|
postStateValidatorsNodesPopulatedMiss: Gauge;
|
|
34
33
|
postStateValidatorsNodesPopulatedHit: Gauge;
|
|
35
|
-
|
|
34
|
+
newSeenAttestersPerBlock: Gauge;
|
|
35
|
+
newSeenAttestersEffectiveBalancePerBlock: Gauge;
|
|
36
|
+
attestationsPerBlock: Gauge;
|
|
36
37
|
};
|
|
37
38
|
export declare function onStateCloneMetrics(state: CachedBeaconStateAllForks, metrics: BeaconStateTransitionMetrics, source: StateCloneSource): void;
|
|
38
39
|
export declare function onPostStateMetrics(postState: CachedBeaconStateAllForks, metrics: BeaconStateTransitionMetrics): void;
|
package/lib/metrics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AA4BA,MAAM,UAAU,mBAAmB,CACjC,KAAgC,EAChC,OAAqC,EACrC,MAAwB;IAExB,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAEvD,IAAI,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,iCAAiC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,CAAC;IAC1D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,kCAAkC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,0BAA0B,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,mCAAmC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,oCAAoC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,SAAoC,EAAE,OAAqC;IAC5G,IAAI,wBAAwB,CAAC,SAAS,CAAC,EAAE,CAAC;QACxC,OAAO,CAAC,kCAAkC,CAAC,GAAG,EAAE,CAAC;IACnD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,mCAAmC,CAAC,GAAG,EAAE,CAAC;IACpD,CAAC;IAED,IAAI,0BAA0B,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1C,OAAO,CAAC,oCAAoC,CAAC,GAAG,EAAE,CAAC;IACrD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,qCAAqC,CAAC,GAAG,EAAE,CAAC;IACtD,CAAC;AACH,CAAC;AAED,oFAAoF;AACpF,4FAA4F;AAC5F,wFAAwF;AACxF,SAAS,0BAA0B,CAAC,KAAgC;IAClE,yEAAyE;IACzE,OAAO,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;AACrD,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAgC;IAChE,yEAAyE;IACzE,OAAO,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;AACnD,CAAC"}
|
package/lib/stateTransition.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SignedBeaconBlock, SignedBlindedBeaconBlock, Slot } from "@lodestar/types";
|
|
1
|
+
import { Epoch, SignedBeaconBlock, SignedBlindedBeaconBlock, Slot } from "@lodestar/types";
|
|
2
2
|
import { BlockExternalData } from "./block/externalData.js";
|
|
3
3
|
import { ProcessBlockOpts } from "./block/types.js";
|
|
4
4
|
import { EpochTransitionCacheOpts } from "./cache/epochTransitionCache.js";
|
|
@@ -10,6 +10,13 @@ export type StateTransitionOpts = BlockExternalData & EpochTransitionCacheOpts &
|
|
|
10
10
|
verifySignatures?: boolean;
|
|
11
11
|
dontTransferCache?: boolean;
|
|
12
12
|
};
|
|
13
|
+
export type StateTransitionModules = {
|
|
14
|
+
metrics?: BeaconStateTransitionMetrics | null;
|
|
15
|
+
validatorMonitor?: ValidatorMonitor | null;
|
|
16
|
+
};
|
|
17
|
+
interface ValidatorMonitor {
|
|
18
|
+
registerValidatorStatuses(currentEpoch: Epoch, inclusionDelays: number[], flags: number[], isActiveCurrEpoch: boolean[], isActivePrevEpoch: boolean[], balances?: number[]): void;
|
|
19
|
+
}
|
|
13
20
|
/**
|
|
14
21
|
* `state.clone()` invocation source tracked in metrics
|
|
15
22
|
*/
|
|
@@ -31,7 +38,7 @@ export declare enum StateHashTreeRootSource {
|
|
|
31
38
|
/**
|
|
32
39
|
* Implementation Note: follows the optimizations in protolambda's eth2fastspec (https://github.com/protolambda/eth2fastspec)
|
|
33
40
|
*/
|
|
34
|
-
export declare function stateTransition(state: CachedBeaconStateAllForks, signedBlock: SignedBeaconBlock | SignedBlindedBeaconBlock, options?: StateTransitionOpts, metrics
|
|
41
|
+
export declare function stateTransition(state: CachedBeaconStateAllForks, signedBlock: SignedBeaconBlock | SignedBlindedBeaconBlock, options?: StateTransitionOpts, { metrics, validatorMonitor }?: StateTransitionModules): CachedBeaconStateAllForks;
|
|
35
42
|
/**
|
|
36
43
|
* Like `processSlots` from the spec but additionally handles fork upgrades
|
|
37
44
|
*
|
|
@@ -39,5 +46,6 @@ export declare function stateTransition(state: CachedBeaconStateAllForks, signed
|
|
|
39
46
|
*/
|
|
40
47
|
export declare function processSlots(state: CachedBeaconStateAllForks, slot: Slot, epochTransitionCacheOpts?: EpochTransitionCacheOpts & {
|
|
41
48
|
dontTransferCache?: boolean;
|
|
42
|
-
}, metrics
|
|
49
|
+
}, { metrics, validatorMonitor }?: StateTransitionModules): CachedBeaconStateAllForks;
|
|
50
|
+
export {};
|
|
43
51
|
//# sourceMappingURL=stateTransition.d.ts.map
|
package/lib/stateTransition.js
CHANGED
|
@@ -37,7 +37,7 @@ export function stateTransition(state, signedBlock, options = {
|
|
|
37
37
|
// Assume default to be valid and available
|
|
38
38
|
executionPayloadStatus: ExecutionPayloadStatus.valid,
|
|
39
39
|
dataAvailableStatus: DataAvailableStatus.available,
|
|
40
|
-
}, metrics) {
|
|
40
|
+
}, { metrics, validatorMonitor } = {}) {
|
|
41
41
|
const { verifyStateRoot = true, verifyProposer = true } = options;
|
|
42
42
|
const block = signedBlock.message;
|
|
43
43
|
const blockSlot = block.slot;
|
|
@@ -50,7 +50,7 @@ export function stateTransition(state, signedBlock, options = {
|
|
|
50
50
|
// postState.setStateCachesAsTransient();
|
|
51
51
|
// Process slots (including those with no blocks) since block.
|
|
52
52
|
// Includes state upgrades
|
|
53
|
-
postState = processSlotsWithTransientCache(postState, blockSlot, options, metrics);
|
|
53
|
+
postState = processSlotsWithTransientCache(postState, blockSlot, options, { metrics, validatorMonitor });
|
|
54
54
|
// Verify proposer signature only
|
|
55
55
|
if (verifyProposer && !verifyProposerSignature(postState, signedBlock)) {
|
|
56
56
|
throw new Error("Invalid block signature");
|
|
@@ -59,7 +59,7 @@ export function stateTransition(state, signedBlock, options = {
|
|
|
59
59
|
const fork = state.config.getForkSeq(block.slot);
|
|
60
60
|
// Note: time only on success
|
|
61
61
|
const processBlockTimer = metrics?.processBlockTime.startTimer();
|
|
62
|
-
processBlock(fork, postState, block, options, options);
|
|
62
|
+
processBlock(fork, postState, block, options, options, metrics);
|
|
63
63
|
const processBlockCommitTimer = metrics?.processBlockCommitTime.startTimer();
|
|
64
64
|
postState.commit();
|
|
65
65
|
processBlockCommitTimer?.();
|
|
@@ -86,7 +86,7 @@ export function stateTransition(state, signedBlock, options = {
|
|
|
86
86
|
*
|
|
87
87
|
* Implementation Note: follows the optimizations in protolambda's eth2fastspec (https://github.com/protolambda/eth2fastspec)
|
|
88
88
|
*/
|
|
89
|
-
export function processSlots(state, slot, epochTransitionCacheOpts, metrics) {
|
|
89
|
+
export function processSlots(state, slot, epochTransitionCacheOpts, { metrics, validatorMonitor } = {}) {
|
|
90
90
|
// .clone() before mutating state in state transition
|
|
91
91
|
let postState = state.clone(epochTransitionCacheOpts?.dontTransferCache);
|
|
92
92
|
if (metrics) {
|
|
@@ -94,7 +94,7 @@ export function processSlots(state, slot, epochTransitionCacheOpts, metrics) {
|
|
|
94
94
|
}
|
|
95
95
|
// State is already a ViewDU, which won't commit changes. Equivalent to .setStateCachesAsTransient()
|
|
96
96
|
// postState.setStateCachesAsTransient();
|
|
97
|
-
postState = processSlotsWithTransientCache(postState, slot, epochTransitionCacheOpts, metrics);
|
|
97
|
+
postState = processSlotsWithTransientCache(postState, slot, epochTransitionCacheOpts, { metrics, validatorMonitor });
|
|
98
98
|
// Apply changes to state, must do before hashing
|
|
99
99
|
postState.commit();
|
|
100
100
|
return postState;
|
|
@@ -121,7 +121,7 @@ export function processSlots(state, slot, epochTransitionCacheOpts, metrics) {
|
|
|
121
121
|
* ╚═══════════════════════════════════════════════════════════════════════════════════╝
|
|
122
122
|
* beacon-node ShufflingCache
|
|
123
123
|
*/
|
|
124
|
-
function processSlotsWithTransientCache(postState, slot, epochTransitionCacheOpts, metrics) {
|
|
124
|
+
function processSlotsWithTransientCache(postState, slot, epochTransitionCacheOpts, { metrics, validatorMonitor } = {}) {
|
|
125
125
|
const { config } = postState;
|
|
126
126
|
if (postState.slot > slot) {
|
|
127
127
|
throw Error(`Too old slot ${slot}, current=${postState.slot}`);
|
|
@@ -141,7 +141,7 @@ function processSlotsWithTransientCache(postState, slot, epochTransitionCacheOpt
|
|
|
141
141
|
}
|
|
142
142
|
processEpoch(fork, postState, epochTransitionCache, metrics);
|
|
143
143
|
const { currentEpoch, inclusionDelays, flags, isActiveCurrEpoch, isActivePrevEpoch, balances } = epochTransitionCache;
|
|
144
|
-
|
|
144
|
+
validatorMonitor?.registerValidatorStatuses(currentEpoch, inclusionDelays, flags, isActiveCurrEpoch, isActivePrevEpoch, balances);
|
|
145
145
|
postState.slot++;
|
|
146
146
|
{
|
|
147
147
|
const timer = metrics?.epochTransitionStepTime.startTimer({ step: EpochTransitionStep.afterProcessEpoch });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stateTransition.js","sourceRoot":"","sources":["../src/stateTransition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,
|
|
1
|
+
{"version":3,"file":"stateTransition.js","sourceRoot":"","sources":["../src/stateTransition.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"bugs": {
|
|
12
12
|
"url": "https://github.com/ChainSafe/lodestar/issues"
|
|
13
13
|
},
|
|
14
|
-
"version": "1.29.0-dev.
|
|
14
|
+
"version": "1.29.0-dev.8e915fe6fc",
|
|
15
15
|
"type": "module",
|
|
16
16
|
"exports": {
|
|
17
17
|
".": {
|
|
@@ -65,10 +65,10 @@
|
|
|
65
65
|
"@chainsafe/pubkey-index-map": "2.0.0",
|
|
66
66
|
"@chainsafe/ssz": "^1.2.0",
|
|
67
67
|
"@chainsafe/swap-or-not-shuffle": "^1.2.1",
|
|
68
|
-
"@lodestar/config": "1.29.0-dev.
|
|
69
|
-
"@lodestar/params": "1.29.0-dev.
|
|
70
|
-
"@lodestar/types": "1.29.0-dev.
|
|
71
|
-
"@lodestar/utils": "1.29.0-dev.
|
|
68
|
+
"@lodestar/config": "1.29.0-dev.8e915fe6fc",
|
|
69
|
+
"@lodestar/params": "1.29.0-dev.8e915fe6fc",
|
|
70
|
+
"@lodestar/types": "1.29.0-dev.8e915fe6fc",
|
|
71
|
+
"@lodestar/utils": "1.29.0-dev.8e915fe6fc",
|
|
72
72
|
"bigint-buffer": "^1.1.5"
|
|
73
73
|
},
|
|
74
74
|
"keywords": [
|
|
@@ -77,5 +77,5 @@
|
|
|
77
77
|
"beacon",
|
|
78
78
|
"blockchain"
|
|
79
79
|
],
|
|
80
|
-
"gitHead": "
|
|
80
|
+
"gitHead": "34c5f301a3979708a3d9f00e1389298734ded444"
|
|
81
81
|
}
|