@lodestar/fork-choice 1.44.0-dev.985999b30c → 1.44.0-dev.a879adb124
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/forkChoice/fastConfirmation/data.d.ts +4 -0
- package/lib/forkChoice/fastConfirmation/data.d.ts.map +1 -0
- package/lib/forkChoice/fastConfirmation/data.js +31 -0
- package/lib/forkChoice/fastConfirmation/data.js.map +1 -0
- package/lib/forkChoice/fastConfirmation/fastConfirmationRule.d.ts +17 -0
- package/lib/forkChoice/fastConfirmation/fastConfirmationRule.d.ts.map +1 -0
- package/lib/forkChoice/fastConfirmation/fastConfirmationRule.js +129 -0
- package/lib/forkChoice/fastConfirmation/fastConfirmationRule.js.map +1 -0
- package/lib/forkChoice/fastConfirmation/index.d.ts +4 -0
- package/lib/forkChoice/fastConfirmation/index.d.ts.map +1 -0
- package/lib/forkChoice/fastConfirmation/index.js +4 -0
- package/lib/forkChoice/fastConfirmation/index.js.map +1 -0
- package/lib/forkChoice/fastConfirmation/metrics.d.ts +21 -0
- package/lib/forkChoice/fastConfirmation/metrics.d.ts.map +1 -0
- package/lib/forkChoice/fastConfirmation/metrics.js +42 -0
- package/lib/forkChoice/fastConfirmation/metrics.js.map +1 -0
- package/lib/forkChoice/fastConfirmation/rules.d.ts +9 -0
- package/lib/forkChoice/fastConfirmation/rules.d.ts.map +1 -0
- package/lib/forkChoice/fastConfirmation/rules.js +91 -0
- package/lib/forkChoice/fastConfirmation/rules.js.map +1 -0
- package/lib/forkChoice/fastConfirmation/types.d.ts +101 -0
- package/lib/forkChoice/fastConfirmation/types.d.ts.map +1 -0
- package/lib/forkChoice/fastConfirmation/types.js +12 -0
- package/lib/forkChoice/fastConfirmation/types.js.map +1 -0
- package/lib/forkChoice/fastConfirmation/utils.d.ts +47 -0
- package/lib/forkChoice/fastConfirmation/utils.d.ts.map +1 -0
- package/lib/forkChoice/fastConfirmation/utils.js +681 -0
- package/lib/forkChoice/fastConfirmation/utils.js.map +1 -0
- package/lib/forkChoice/forkChoice.d.ts +23 -3
- package/lib/forkChoice/forkChoice.d.ts.map +1 -1
- package/lib/forkChoice/forkChoice.js +116 -9
- package/lib/forkChoice/forkChoice.js.map +1 -1
- package/lib/forkChoice/interface.d.ts +19 -7
- package/lib/forkChoice/interface.d.ts.map +1 -1
- package/lib/forkChoice/interface.js.map +1 -1
- package/lib/forkChoice/safeBlocks.d.ts +2 -6
- package/lib/forkChoice/safeBlocks.d.ts.map +1 -1
- package/lib/forkChoice/safeBlocks.js +15 -7
- package/lib/forkChoice/safeBlocks.js.map +1 -1
- package/lib/forkChoice/store.d.ts +13 -2
- package/lib/forkChoice/store.d.ts.map +1 -1
- package/lib/forkChoice/store.js +29 -1
- package/lib/forkChoice/store.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/metrics.d.ts +12 -1
- package/lib/metrics.d.ts.map +1 -1
- package/lib/metrics.js +2 -0
- package/lib/metrics.js.map +1 -1
- package/lib/protoArray/protoArray.d.ts +67 -20
- package/lib/protoArray/protoArray.d.ts.map +1 -1
- package/lib/protoArray/protoArray.js +170 -38
- package/lib/protoArray/protoArray.js.map +1 -1
- package/package.json +7 -7
- package/src/forkChoice/fastConfirmation/data.ts +43 -0
- package/src/forkChoice/fastConfirmation/fastConfirmationRule.ts +159 -0
- package/src/forkChoice/fastConfirmation/index.ts +3 -0
- package/src/forkChoice/fastConfirmation/metrics.ts +44 -0
- package/src/forkChoice/fastConfirmation/rules.ts +124 -0
- package/src/forkChoice/fastConfirmation/types.ts +111 -0
- package/src/forkChoice/fastConfirmation/utils.ts +968 -0
- package/src/forkChoice/forkChoice.ts +150 -10
- package/src/forkChoice/interface.ts +36 -7
- package/src/forkChoice/safeBlocks.ts +15 -7
- package/src/forkChoice/store.ts +34 -1
- package/src/index.ts +11 -0
- package/src/metrics.ts +3 -1
- package/src/protoArray/protoArray.ts +184 -41
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DataAvailabilityStatus, EffectiveBalanceIncrements, IBeaconStateView } from "@lodestar/state-transition";
|
|
2
|
-
import { AttesterSlashing, BeaconBlock, Epoch, IndexedAttestation, Root, RootHex, Slot } from "@lodestar/types";
|
|
2
|
+
import { AttesterSlashing, BeaconBlock, Epoch, IndexedAttestation, Root, RootHex, Slot, ValidatorIndex } from "@lodestar/types";
|
|
3
3
|
import { BlockExecutionStatus, LVHExecResponse, PayloadExecutionStatus, PayloadStatus, ProtoBlock, ProtoNode } from "../protoArray/interface.js";
|
|
4
4
|
import { UpdateAndGetHeadOpt } from "./forkChoice.js";
|
|
5
5
|
import { CheckpointWithHex } from "./store.js";
|
|
@@ -88,6 +88,8 @@ export interface IForkChoice {
|
|
|
88
88
|
*/
|
|
89
89
|
getHeadRoot(): RootHex;
|
|
90
90
|
getHead(): ProtoBlock;
|
|
91
|
+
getConfirmedRoot(): RootHex;
|
|
92
|
+
getConfirmedBlock(): ProtoBlock | null;
|
|
91
93
|
updateAndGetHead(mode: UpdateAndGetHeadOpt): {
|
|
92
94
|
head: ProtoBlock;
|
|
93
95
|
isHeadTimely?: boolean;
|
|
@@ -109,6 +111,10 @@ export interface IForkChoice {
|
|
|
109
111
|
getAllNodes(): ProtoNode[];
|
|
110
112
|
getFinalizedCheckpoint(): CheckpointWithHex;
|
|
111
113
|
getJustifiedCheckpoint(): CheckpointWithHex;
|
|
114
|
+
getUnrealizedJustifiedCheckpoint(): CheckpointWithHex;
|
|
115
|
+
getUnrealizedFinalizedCheckpoint(): CheckpointWithHex;
|
|
116
|
+
getProposerBoostRoot(): RootHex;
|
|
117
|
+
getPreviousProposerBoostRoot(): RootHex;
|
|
112
118
|
/**
|
|
113
119
|
* Add `block` to the fork choice DAG.
|
|
114
120
|
*
|
|
@@ -125,7 +131,7 @@ export interface IForkChoice {
|
|
|
125
131
|
*
|
|
126
132
|
* The supplied block **must** pass the `state_transition` function as it will not be run here.
|
|
127
133
|
*/
|
|
128
|
-
onBlock(block: BeaconBlock, state: IBeaconStateView, blockDelaySec: number, currentSlot: Slot, executionStatus: BlockExecutionStatus, dataAvailabilityStatus: DataAvailabilityStatus): ProtoBlock;
|
|
134
|
+
onBlock(block: BeaconBlock, state: IBeaconStateView, blockDelaySec: number, currentSlot: Slot, executionStatus: BlockExecutionStatus, dataAvailabilityStatus: DataAvailabilityStatus, expectedProposerIndex: ValidatorIndex | null): ProtoBlock;
|
|
129
135
|
/**
|
|
130
136
|
* Register `attestation` with the fork choice DAG so that it may influence future calls to `getHead`.
|
|
131
137
|
*
|
|
@@ -160,12 +166,8 @@ export interface IForkChoice {
|
|
|
160
166
|
* ## Specification
|
|
161
167
|
*
|
|
162
168
|
* https://github.com/ethereum/consensus-specs/blob/v1.7.0-alpha.0/specs/gloas/fork-choice.md#new-notify_ptc_messages
|
|
163
|
-
*
|
|
164
|
-
* @param blockRoot - The beacon block root being attested
|
|
165
|
-
* @param ptcIndices - Array of PTC committee indices that voted
|
|
166
|
-
* @param payloadPresent - Whether validators attest the payload is present
|
|
167
169
|
*/
|
|
168
|
-
notifyPtcMessages(blockRoot: RootHex, ptcIndices: number[], payloadPresent: boolean): void;
|
|
170
|
+
notifyPtcMessages(blockRoot: RootHex, slot: Slot, ptcIndices: number[], payloadPresent: boolean, blobDataAvailable: boolean): void;
|
|
169
171
|
/**
|
|
170
172
|
* Notify fork choice that an execution payload has arrived (Gloas fork)
|
|
171
173
|
* Creates the FULL variant of a Gloas block when the payload becomes available
|
|
@@ -206,6 +208,14 @@ export interface IForkChoice {
|
|
|
206
208
|
hasPayloadHexUnsafe(blockRoot: RootHex): boolean;
|
|
207
209
|
getSlotsPresent(windowStart: number): number;
|
|
208
210
|
getPTCVotes(blockRootHex: RootHex): (boolean | null)[] | null;
|
|
211
|
+
/** Raw PTC vote tallies for the debug fork choice endpoint; `null` for pre-Gloas roots. */
|
|
212
|
+
getPTCVoteCounts(blockRootHex: RootHex): {
|
|
213
|
+
attesterCount: number;
|
|
214
|
+
payloadPresentCount: number;
|
|
215
|
+
dataAvailableCount: number;
|
|
216
|
+
} | null;
|
|
217
|
+
getPayloadTimelinessVotes(blockRootHex: RootHex): (boolean | null)[] | null;
|
|
218
|
+
getPayloadDataAvailabilityVotes(blockRootHex: RootHex): (boolean | null)[] | null;
|
|
209
219
|
/**
|
|
210
220
|
* Returns a `ProtoBlock` if the block is known **and** a descendant of the finalized root.
|
|
211
221
|
*/
|
|
@@ -215,6 +225,8 @@ export interface IForkChoice {
|
|
|
215
225
|
getBlockHexDefaultStatus(blockRoot: RootHex): ProtoBlock | null;
|
|
216
226
|
getBlockHexAndBlockHash(blockRoot: RootHex, blockHash: RootHex): ProtoBlock | null;
|
|
217
227
|
shouldExtendPayload(blockRoot: RootHex): boolean;
|
|
228
|
+
/** Spec: should_build_on_full(store, head) */
|
|
229
|
+
shouldBuildOnFull(head: ProtoBlock, slot: Slot): boolean;
|
|
218
230
|
getFinalizedBlock(): ProtoBlock;
|
|
219
231
|
getJustifiedBlock(): ProtoBlock;
|
|
220
232
|
getFinalizedCheckpointSlot(): Slot;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/forkChoice/interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,sBAAsB,EAAE,0BAA0B,EAAE,gBAAgB,EAAC,MAAM,4BAA4B,CAAC;AAChH,OAAO,
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/forkChoice/interface.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/forkChoice/interface.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/forkChoice/interface.ts"],"names":[],"mappings":"SAyCY,eAAe;AAA3B,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,2DAAW,CAAA;IACX,6DAAY,CAAA;AAAC,CACf,EAHY,eAAe,KAAf,eAAe,QAG1B;SAEW,cAAc;AAA1B,IAAY,cAKX;AALD,WAAY,cAAc;IACxB,uEAAc,CAAA;IACd,+DAAU,CAAA;IACV,6EAAiB,CAAA;IACjB,mEAAY,CAAA;AAAC,CACf,EALY,cAAc,KAAd,cAAc,QAKzB;SASW,gBAAgB;AAD5B,yCAAyC;AACzC,IAAY,gBAgBX;AAhBD,WAAY,gBAAgB;IAC1B,2DAAuC,CAAA;IACvC,uEAAmD,CAAA;IACnD,6EAAyD,CAAA;IACzD,6DAAyC,CAAA;IACzC,2DAAuC,CAAA;IACvC,+DAA2C,CAAA;IAC3C,6FAAyE,CAAA;IACzE,iEAA6C,CAAA;IAC7C,uEAAmD,CAAA;IACnD,yDAAqC,CAAA;IACrC,iEAA6C,CAAA;IAC7C,6DAAyC,CAAA;IACzC,mEAA+C,CAAA;IAC/C,mEAA+C,CAAA;IAC/C,uCAAmB,CAAA;AAAC,CAAC,EAfX,gBAAgB,KAAhB,gBAAgB,QAgB3B"}
|
|
@@ -5,17 +5,13 @@ import { IForkChoice } from "./interface.js";
|
|
|
5
5
|
* that is safe from re-orgs. Normally this block is pretty close to the head of canonical
|
|
6
6
|
* chain which makes it valuable to expose a safe block to users.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
8
|
+
* @deprecated The merged fast-confirmation spec only defines `get_safe_execution_block_hash`.
|
|
9
9
|
*/
|
|
10
10
|
export declare function getSafeBeaconBlockRoot(fc: IForkChoice): Root;
|
|
11
11
|
/**
|
|
12
12
|
* Get execution payload hash for the safe block
|
|
13
|
-
* This function assumes that safe block is post Bellatrix and function should not be called otherwise.
|
|
14
13
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* https://github.com/ethereum/consensus-specs/blob/v1.6.0/fork_choice/safe-block.md#get_safe_execution_block_hash
|
|
14
|
+
* https://github.com/ethereum/consensus-specs/blob/master/fork_choice/safe-block.md#get_safe_execution_block_hash
|
|
19
15
|
*/
|
|
20
16
|
export declare function getSafeExecutionBlockHash(forkChoice: IForkChoice): RootHex;
|
|
21
17
|
//# sourceMappingURL=safeBlocks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safeBlocks.d.ts","sourceRoot":"","sources":["../../src/forkChoice/safeBlocks.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAE,OAAO,EAAC,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"safeBlocks.d.ts","sourceRoot":"","sources":["../../src/forkChoice/safeBlocks.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAE,OAAO,EAAC,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAE3C;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,CAM5D;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,WAAW,GAAG,OAAO,CAS1E"}
|
|
@@ -1,24 +1,32 @@
|
|
|
1
1
|
import { ZERO_HASH_HEX } from "@lodestar/params";
|
|
2
|
+
import { fromHex } from "@lodestar/utils";
|
|
2
3
|
/**
|
|
3
4
|
* Under honest majority and certain network synchronicity assumptions there exists a block
|
|
4
5
|
* that is safe from re-orgs. Normally this block is pretty close to the head of canonical
|
|
5
6
|
* chain which makes it valuable to expose a safe block to users.
|
|
6
7
|
*
|
|
7
|
-
*
|
|
8
|
+
* @deprecated The merged fast-confirmation spec only defines `get_safe_execution_block_hash`.
|
|
8
9
|
*/
|
|
9
10
|
export function getSafeBeaconBlockRoot(fc) {
|
|
11
|
+
const confirmedRoot = fc.getConfirmedRoot();
|
|
12
|
+
if (confirmedRoot && fc.hasBlockHex(confirmedRoot)) {
|
|
13
|
+
return fromHex(confirmedRoot);
|
|
14
|
+
}
|
|
10
15
|
return fc.getJustifiedCheckpoint().root;
|
|
11
16
|
}
|
|
12
17
|
/**
|
|
13
18
|
* Get execution payload hash for the safe block
|
|
14
|
-
* This function assumes that safe block is post Bellatrix and function should not be called otherwise.
|
|
15
19
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* https://github.com/ethereum/consensus-specs/blob/v1.6.0/fork_choice/safe-block.md#get_safe_execution_block_hash
|
|
20
|
+
* https://github.com/ethereum/consensus-specs/blob/master/fork_choice/safe-block.md#get_safe_execution_block_hash
|
|
20
21
|
*/
|
|
21
22
|
export function getSafeExecutionBlockHash(forkChoice) {
|
|
22
|
-
|
|
23
|
+
const confirmedRoot = forkChoice.getConfirmedRoot();
|
|
24
|
+
if (confirmedRoot) {
|
|
25
|
+
const confirmedBlock = forkChoice.getBlockHexDefaultStatus(confirmedRoot);
|
|
26
|
+
if (confirmedBlock?.executionPayloadBlockHash) {
|
|
27
|
+
return confirmedBlock.executionPayloadBlockHash;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return ZERO_HASH_HEX;
|
|
23
31
|
}
|
|
24
32
|
//# sourceMappingURL=safeBlocks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safeBlocks.js","sourceRoot":"","sources":["../../src/forkChoice/safeBlocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"safeBlocks.js","sourceRoot":"","sources":["../../src/forkChoice/safeBlocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAC,OAAO,EAAC,MAAM,iBAAiB,CAAC;AAGxC;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,EAAe,EAAQ;IAC5D,MAAM,aAAa,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAC5C,IAAI,aAAa,IAAI,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC;QACnD,OAAO,OAAO,CAAC,aAAa,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,EAAE,CAAC,sBAAsB,EAAE,CAAC,IAAI,CAAC;AAAA,CACzC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,UAAuB,EAAW;IAC1E,MAAM,aAAa,GAAG,UAAU,CAAC,gBAAgB,EAAE,CAAC;IACpD,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,cAAc,GAAG,UAAU,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC;QAC1E,IAAI,cAAc,EAAE,yBAAyB,EAAE,CAAC;YAC9C,OAAO,cAAc,CAAC,yBAAyB,CAAC;QAClD,CAAC;IACH,CAAC;IACD,OAAO,aAAa,CAAC;AAAA,CACtB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { EffectiveBalanceIncrements, IBeaconStateView } from "@lodestar/state-transition";
|
|
2
2
|
import { RootHex, Slot, ValidatorIndex, phase0 } from "@lodestar/types";
|
|
3
|
+
import { ForkChoiceStateGetter, IFastConfirmationStore } from "./fastConfirmation/types.ts";
|
|
3
4
|
import { CheckpointWithBalance, CheckpointWithTotalBalance } from "./interface.js";
|
|
4
5
|
/**
|
|
5
6
|
* Stores checkpoints in a hybrid format:
|
|
@@ -29,7 +30,7 @@ export type JustifiedBalancesGetter = (checkpoint: CheckpointWithHex, blockState
|
|
|
29
30
|
* - The actual block DAG in `ProtoArray`.
|
|
30
31
|
* - `time` is represented using `Slot` instead of UNIX epoch `u64`.
|
|
31
32
|
*/
|
|
32
|
-
export interface IForkChoiceStore {
|
|
33
|
+
export interface IForkChoiceStore extends IFastConfirmationStore {
|
|
33
34
|
currentSlot: Slot;
|
|
34
35
|
get justified(): CheckpointWithTotalBalance;
|
|
35
36
|
set justified(justified: CheckpointWithBalance);
|
|
@@ -51,7 +52,17 @@ export declare class ForkChoiceStore implements IForkChoiceStore {
|
|
|
51
52
|
equivocatingIndices: Set<number>;
|
|
52
53
|
justifiedBalancesGetter: JustifiedBalancesGetter;
|
|
53
54
|
currentSlot: Slot;
|
|
54
|
-
|
|
55
|
+
confirmedRoot: RootHex;
|
|
56
|
+
previousEpochObservedJustifiedCheckpoint: CheckpointWithHex;
|
|
57
|
+
currentEpochObservedJustifiedCheckpoint: CheckpointWithHex;
|
|
58
|
+
previousEpochGreatestUnrealizedCheckpoint: CheckpointWithHex;
|
|
59
|
+
previousSlotHead: RootHex;
|
|
60
|
+
currentSlotHead: RootHex;
|
|
61
|
+
previousEpochObservedJustifiedBalances: JustifiedBalances;
|
|
62
|
+
currentEpochObservedJustifiedBalances: JustifiedBalances;
|
|
63
|
+
previousEpochGreatestUnrealizedBalances: JustifiedBalances;
|
|
64
|
+
stateGetter: ForkChoiceStateGetter;
|
|
65
|
+
constructor(currentSlot: Slot, justifiedCheckpoint: phase0.Checkpoint, finalizedCheckpoint: phase0.Checkpoint, justifiedBalances: EffectiveBalanceIncrements, justifiedBalancesGetter: JustifiedBalancesGetter, stateGetter: ForkChoiceStateGetter, events?: {
|
|
55
66
|
onJustified: (cp: CheckpointWithHex) => void;
|
|
56
67
|
onFinalized: (cp: CheckpointWithHex) => void;
|
|
57
68
|
} | undefined);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/forkChoice/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,0BAA0B,EAAE,gBAAgB,EAAC,MAAM,4BAA4B,CAAC;AACxF,OAAO,EAAC,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAEtE,OAAO,EAAC,qBAAqB,EAAE,0BAA0B,EAAC,MAAM,gBAAgB,CAAC;AAEjF;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,UAAU,GAAG;IAAC,OAAO,EAAE,OAAO,CAAA;CAAC,CAAC;AAEvE,MAAM,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,GAAG,CACpC,UAAU,EAAE,iBAAiB,EAC7B,UAAU,EAAE,gBAAgB,KACzB,iBAAiB,CAAC;AAEvB;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/forkChoice/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,0BAA0B,EAAE,gBAAgB,EAAC,MAAM,4BAA4B,CAAC;AACxF,OAAO,EAAC,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAEtE,OAAO,EAAC,qBAAqB,EAAE,sBAAsB,EAAC,MAAM,6BAA6B,CAAC;AAC1F,OAAO,EAAC,qBAAqB,EAAE,0BAA0B,EAAC,MAAM,gBAAgB,CAAC;AAEjF;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,UAAU,GAAG;IAAC,OAAO,EAAE,OAAO,CAAA;CAAC,CAAC;AAEvE,MAAM,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,GAAG,CACpC,UAAU,EAAE,iBAAiB,EAC7B,UAAU,EAAE,gBAAgB,KACzB,iBAAiB,CAAC;AAEvB;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,gBAAiB,SAAQ,sBAAsB;IAC9D,WAAW,EAAE,IAAI,CAAC;IAClB,IAAI,SAAS,IAAI,0BAA0B,CAAC;IAC5C,IAAI,SAAS,CAAC,SAAS,EAAE,qBAAqB,EAAE;IAChD,mBAAmB,EAAE,qBAAqB,CAAC;IAC3C,mBAAmB,EAAE,iBAAiB,CAAC;IACvC,6BAA6B,EAAE,iBAAiB,CAAC;IACjD,uBAAuB,EAAE,uBAAuB,CAAC;IACjD,mBAAmB,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CAC1C;AAED;;GAEG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;IA8BpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IA7B1B,OAAO,CAAC,UAAU,CAA6B;IAC/C,mBAAmB,EAAE,qBAAqB,CAAC;IAC3C,OAAO,CAAC,oBAAoB,CAAoB;IAChD,6BAA6B,EAAE,iBAAiB,CAAC;IACjD,mBAAmB,cAA6B;IAChD,uBAAuB,EAAE,uBAAuB,CAAC;IACjD,WAAW,EAAE,IAAI,CAAC;IAGlB,aAAa,EAAE,OAAO,CAAC;IACvB,wCAAwC,EAAE,iBAAiB,CAAC;IAC5D,uCAAuC,EAAE,iBAAiB,CAAC;IAC3D,yCAAyC,EAAE,iBAAiB,CAAC;IAC7D,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;IAGzB,sCAAsC,EAAE,iBAAiB,CAAC;IAC1D,qCAAqC,EAAE,iBAAiB,CAAC;IACzD,uCAAuC,EAAE,iBAAiB,CAAC;IAC3D,WAAW,EAAE,qBAAqB,CAAC;IAEnC,YACE,WAAW,EAAE,IAAI,EACjB,mBAAmB,EAAE,MAAM,CAAC,UAAU,EACtC,mBAAmB,EAAE,MAAM,CAAC,UAAU,EACtC,iBAAiB,EAAE,0BAA0B,EAC7C,uBAAuB,EAAE,uBAAuB,EAChD,WAAW,EAAE,qBAAqB,EACjB,MAAM,CAAC;;;iBAGvB,EA8BF;IAED,IAAI,SAAS,IAAI,0BAA0B,CAE1C;IACD,IAAI,SAAS,CAAC,SAAS,EAAE,qBAAqB,EAG7C;IAED,IAAI,mBAAmB,IAAI,iBAAiB,CAE3C;IACD,IAAI,mBAAmB,CAAC,UAAU,EAAE,iBAAiB,EAIpD;CACF;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,GAAG,iBAAiB,CASpF;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAE1F;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,0BAA0B,GAAG,MAAM,CAMhF"}
|
package/lib/forkChoice/store.js
CHANGED
|
@@ -11,10 +11,23 @@ export class ForkChoiceStore {
|
|
|
11
11
|
equivocatingIndices = new Set();
|
|
12
12
|
justifiedBalancesGetter;
|
|
13
13
|
currentSlot;
|
|
14
|
-
|
|
14
|
+
// Fast Confirmation Rule spec fields
|
|
15
|
+
confirmedRoot;
|
|
16
|
+
previousEpochObservedJustifiedCheckpoint;
|
|
17
|
+
currentEpochObservedJustifiedCheckpoint;
|
|
18
|
+
previousEpochGreatestUnrealizedCheckpoint;
|
|
19
|
+
previousSlotHead;
|
|
20
|
+
currentSlotHead;
|
|
21
|
+
// Fast Confirmation Rule internal fields
|
|
22
|
+
previousEpochObservedJustifiedBalances;
|
|
23
|
+
currentEpochObservedJustifiedBalances;
|
|
24
|
+
previousEpochGreatestUnrealizedBalances;
|
|
25
|
+
stateGetter;
|
|
26
|
+
constructor(currentSlot, justifiedCheckpoint, finalizedCheckpoint, justifiedBalances, justifiedBalancesGetter, stateGetter, events) {
|
|
15
27
|
this.events = events;
|
|
16
28
|
this.justifiedBalancesGetter = justifiedBalancesGetter;
|
|
17
29
|
this.currentSlot = currentSlot;
|
|
30
|
+
this.stateGetter = stateGetter;
|
|
18
31
|
const justified = {
|
|
19
32
|
checkpoint: toCheckpointWithHex(justifiedCheckpoint),
|
|
20
33
|
balances: justifiedBalances,
|
|
@@ -24,6 +37,21 @@ export class ForkChoiceStore {
|
|
|
24
37
|
this.unrealizedJustified = justified;
|
|
25
38
|
this._finalizedCheckpoint = toCheckpointWithHex(finalizedCheckpoint);
|
|
26
39
|
this.unrealizedFinalizedCheckpoint = this._finalizedCheckpoint;
|
|
40
|
+
// Initialize Fast Confirmation fields conservatively from finalized, matching
|
|
41
|
+
// the spec's get_fast_confirmation_store() behavior.
|
|
42
|
+
const finalizedCheckpointWithHex = toCheckpointWithHex(finalizedCheckpoint);
|
|
43
|
+
const finalizedState = stateGetter({ checkpoint: finalizedCheckpointWithHex });
|
|
44
|
+
const finalizedBalances = finalizedState?.effectiveBalanceIncrements ?? justifiedBalances;
|
|
45
|
+
const anchorRoot = finalizedCheckpointWithHex.rootHex;
|
|
46
|
+
this.previousEpochObservedJustifiedCheckpoint = finalizedCheckpointWithHex;
|
|
47
|
+
this.currentEpochObservedJustifiedCheckpoint = finalizedCheckpointWithHex;
|
|
48
|
+
this.previousEpochGreatestUnrealizedCheckpoint = finalizedCheckpointWithHex;
|
|
49
|
+
this.confirmedRoot = anchorRoot;
|
|
50
|
+
this.previousEpochObservedJustifiedBalances = finalizedBalances;
|
|
51
|
+
this.currentEpochObservedJustifiedBalances = finalizedBalances;
|
|
52
|
+
this.previousEpochGreatestUnrealizedBalances = finalizedBalances;
|
|
53
|
+
this.previousSlotHead = anchorRoot;
|
|
54
|
+
this.currentSlotHead = anchorRoot;
|
|
27
55
|
}
|
|
28
56
|
get justified() {
|
|
29
57
|
return this._justified;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/forkChoice/store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/forkChoice/store.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { ForkChoiceError, ForkChoiceErrorCode, type InvalidAttestation, InvalidAttestationCode, type InvalidBlock, InvalidBlockCode, } from "./forkChoice/errors.js";
|
|
2
|
+
export { type FastConfirmationBalanceSource, type FastConfirmationContext, type FastConfirmationMetrics, type FastConfirmationResult, FastConfirmationRule, type ForkChoiceStateGetter, type IFastConfirmationRule, type IFastConfirmationStore, getFastConfirmationMetrics, } from "./forkChoice/fastConfirmation/fastConfirmationRule.ts";
|
|
2
3
|
export { ForkChoice, type ForkChoiceOpts, UpdateHeadOpt } from "./forkChoice/forkChoice.js";
|
|
3
4
|
export { type AncestorResult, AncestorStatus, type CheckpointWithBalance, type CheckpointWithTotalBalance, EpochDifference, type IForkChoice, NotReorgedReason, } from "./forkChoice/interface.js";
|
|
4
5
|
export * from "./forkChoice/safeBlocks.js";
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,KAAK,kBAAkB,EACvB,sBAAsB,EACtB,KAAK,YAAY,EACjB,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAC,UAAU,EAAE,KAAK,cAAc,EAAE,aAAa,EAAC,MAAM,4BAA4B,CAAC;AAC1F,OAAO,EACL,KAAK,cAAc,EACnB,cAAc,EACd,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,eAAe,EACf,KAAK,WAAW,EAChB,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EACL,KAAK,iBAAiB,EACtB,eAAe,EACf,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,GAC7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAC,KAAK,iBAAiB,EAAE,oBAAoB,EAAC,MAAM,cAAc,CAAC;AAC1E,YAAY,EACV,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,EACtB,UAAU,EACV,SAAS,GACV,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAC,eAAe,EAAE,aAAa,EAAE,YAAY,EAAC,MAAM,2BAA2B,CAAC;AACvF,OAAO,EAAC,UAAU,EAAC,MAAM,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,KAAK,kBAAkB,EACvB,sBAAsB,EACtB,KAAK,YAAY,EACjB,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,KAAK,6BAA6B,EAClC,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,oBAAoB,EACpB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,0BAA0B,GAC3B,MAAM,uDAAuD,CAAC;AAC/D,OAAO,EAAC,UAAU,EAAE,KAAK,cAAc,EAAE,aAAa,EAAC,MAAM,4BAA4B,CAAC;AAC1F,OAAO,EACL,KAAK,cAAc,EACnB,cAAc,EACd,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,eAAe,EACf,KAAK,WAAW,EAChB,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EACL,KAAK,iBAAiB,EACtB,eAAe,EACf,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,GAC7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAC,KAAK,iBAAiB,EAAE,oBAAoB,EAAC,MAAM,cAAc,CAAC;AAC1E,YAAY,EACV,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,EACtB,UAAU,EACV,SAAS,GACV,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAC,eAAe,EAAE,aAAa,EAAE,YAAY,EAAC,MAAM,2BAA2B,CAAC;AACvF,OAAO,EAAC,UAAU,EAAC,MAAM,4BAA4B,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { ForkChoiceError, ForkChoiceErrorCode, InvalidAttestationCode, InvalidBlockCode, } from "./forkChoice/errors.js";
|
|
2
|
+
export { FastConfirmationRule, getFastConfirmationMetrics, } from "./forkChoice/fastConfirmation/fastConfirmationRule.js";
|
|
2
3
|
export { ForkChoice, UpdateHeadOpt } from "./forkChoice/forkChoice.js";
|
|
3
4
|
export { AncestorStatus, EpochDifference, NotReorgedReason, } from "./forkChoice/interface.js";
|
|
4
5
|
export * from "./forkChoice/safeBlocks.js";
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,mBAAmB,EAEnB,sBAAsB,EAEtB,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAC,UAAU,EAAuB,aAAa,EAAC,MAAM,4BAA4B,CAAC;AAC1F,OAAO,EAEL,cAAc,EAGd,eAAe,EAEf,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAEL,eAAe,GAGhB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAyB,oBAAoB,EAAC,MAAM,cAAc,CAAC;AAU1E,OAAO,EAAC,eAAe,EAAE,aAAa,EAAE,YAAY,EAAC,MAAM,2BAA2B,CAAC;AACvF,OAAO,EAAC,UAAU,EAAC,MAAM,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,mBAAmB,EAEnB,sBAAsB,EAEtB,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAKL,oBAAoB,EAIpB,0BAA0B,GAC3B,MAAM,uDAAuD,CAAC;AAC/D,OAAO,EAAC,UAAU,EAAuB,aAAa,EAAC,MAAM,4BAA4B,CAAC;AAC1F,OAAO,EAEL,cAAc,EAGd,eAAe,EAEf,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAEL,eAAe,GAGhB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAyB,oBAAoB,EAAC,MAAM,cAAc,CAAC;AAU1E,OAAO,EAAC,eAAe,EAAE,aAAa,EAAE,YAAY,EAAC,MAAM,2BAA2B,CAAC;AACvF,OAAO,EAAC,UAAU,EAAC,MAAM,4BAA4B,CAAC"}
|
package/lib/metrics.d.ts
CHANGED
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
import { MetricsRegisterExtra } from "@lodestar/utils";
|
|
2
|
+
import { FastConfirmationMetrics } from "./forkChoice/fastConfirmation/metrics.ts";
|
|
2
3
|
import { UpdateHeadOpt } from "./forkChoice/forkChoice.js";
|
|
3
4
|
import { NotReorgedReason } from "./forkChoice/interface.js";
|
|
4
|
-
export type ForkChoiceMetrics = ReturnType<typeof getForkChoiceMetrics
|
|
5
|
+
export type ForkChoiceMetrics = ReturnType<typeof getForkChoiceMetrics> & FastConfirmationMetrics;
|
|
5
6
|
export declare function getForkChoiceMetrics(register: MetricsRegisterExtra): {
|
|
7
|
+
fastConfirmation: {
|
|
8
|
+
totalDuration: import("@lodestar/utils").Histogram<import("@lodestar/utils").NoLabels>;
|
|
9
|
+
stepsDuration: import("@lodestar/utils").Histogram<{
|
|
10
|
+
step: import("./forkChoice/fastConfirmation/metrics.ts").FastConfirmationSteps;
|
|
11
|
+
}>;
|
|
12
|
+
confirmedEpoch: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
|
|
13
|
+
confirmedSlot: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
|
|
14
|
+
votesTracked: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
|
|
15
|
+
resets: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
|
|
16
|
+
};
|
|
6
17
|
forkChoice: {
|
|
7
18
|
findHead: import("@lodestar/utils").Histogram<{
|
|
8
19
|
caller: string;
|
package/lib/metrics.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAC,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAC,gBAAgB,EAAC,MAAM,2BAA2B,CAAC;AAE3D,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAC,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAC,uBAAuB,EAA6B,MAAM,0CAA0C,CAAC;AAC7G,OAAO,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAC,gBAAgB,EAAC,MAAM,2BAA2B,CAAC;AAE3D,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,GAAG,uBAAuB,CAAC;AAElG,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoGlE"}
|
package/lib/metrics.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { getFastConfirmationMetrics } from "./forkChoice/fastConfirmation/metrics.js";
|
|
1
2
|
export function getForkChoiceMetrics(register) {
|
|
2
3
|
return {
|
|
4
|
+
...getFastConfirmationMetrics(register),
|
|
3
5
|
forkChoice: {
|
|
4
6
|
findHead: register.histogram({
|
|
5
7
|
name: "beacon_fork_choice_find_head_seconds",
|
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":"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"}
|
|
@@ -3,6 +3,11 @@ import { DataAvailabilityStatus } from "@lodestar/state-transition";
|
|
|
3
3
|
import { Epoch, RootHex, Slot } from "@lodestar/types";
|
|
4
4
|
import { LVHExecError } from "./errors.js";
|
|
5
5
|
import { LVHExecResponse, PayloadExecutionStatus, PayloadStatus, ProtoBlock, ProtoNode } from "./interface.js";
|
|
6
|
+
/**
|
|
7
|
+
* popcount(attended AND NOT yes) — explicit False-vote count.
|
|
8
|
+
* Excludes PTC members who didn't attest (the None state).
|
|
9
|
+
*/
|
|
10
|
+
export declare function countNoVotes(attended: BitArray, yes: BitArray): number;
|
|
6
11
|
export declare const DEFAULT_PRUNE_THRESHOLD = 0;
|
|
7
12
|
type ProposerBoost = {
|
|
8
13
|
root: RootHex;
|
|
@@ -40,12 +45,25 @@ export declare class ProtoArray {
|
|
|
40
45
|
/**
|
|
41
46
|
* PTC (Payload Timeliness Committee) votes per block as bitvectors
|
|
42
47
|
* Maps block root to BitArray of PTC_SIZE bits (512 mainnet, 2 minimal)
|
|
43
|
-
* Spec: gloas/fork-choice.md#modified-store (
|
|
48
|
+
* Spec: gloas/fork-choice.md#modified-store (payload_timeliness_vote)
|
|
44
49
|
*
|
|
45
|
-
* Bit i
|
|
46
|
-
|
|
50
|
+
* Bit i = PTC member i voted payloadPresent=true (timeliness YES vote)
|
|
51
|
+
*/
|
|
52
|
+
private payloadTimelinessVotes;
|
|
53
|
+
/**
|
|
54
|
+
* Blob data availability votes per block.
|
|
55
|
+
* Spec: gloas/fork-choice.md#modified-store (payload_data_availability_vote)
|
|
56
|
+
*
|
|
57
|
+
* Bit i = PTC member i voted blobDataAvailable=true (DA YES vote)
|
|
58
|
+
*/
|
|
59
|
+
private payloadDataAvailabilityVotes;
|
|
60
|
+
/**
|
|
61
|
+
* Tracks which PTC members have attested at all (any payload_status).
|
|
62
|
+
* Without this, we cannot tell "didn't vote" (None) from "voted false" —
|
|
63
|
+
* a distinction required by payload_timeliness/payload_data_availability
|
|
64
|
+
* when called with the negative parameter value.
|
|
47
65
|
*/
|
|
48
|
-
private
|
|
66
|
+
private ptcAttested;
|
|
49
67
|
constructor({ pruneThreshold, justifiedEpoch, justifiedRoot, finalizedEpoch, finalizedRoot }: {
|
|
50
68
|
pruneThreshold: number;
|
|
51
69
|
justifiedEpoch: Epoch;
|
|
@@ -153,26 +171,55 @@ export declare class ProtoArray {
|
|
|
153
171
|
onExecutionPayload(blockRoot: RootHex, currentSlot: Slot, executionPayloadBlockHash: RootHex, executionPayloadNumber: number, executionPayloadGasLimit: number, proposerBoostRoot: RootHex | null, executionStatus: PayloadExecutionStatus, dataAvailabilityStatus: DataAvailabilityStatus): void;
|
|
154
172
|
/**
|
|
155
173
|
* Update PTC votes for multiple validators attesting to a block
|
|
156
|
-
* Spec: gloas/fork-choice.md#new-
|
|
157
|
-
*
|
|
158
|
-
* @param blockRoot - The beacon block root being attested
|
|
159
|
-
* @param ptcIndices - Array of PTC committee indices that voted (0..PTC_SIZE-1)
|
|
160
|
-
* @param payloadPresent - Whether the validators attest the payload is present
|
|
174
|
+
* Spec: gloas/fork-choice.md#new-notify_ptc_messages
|
|
161
175
|
*/
|
|
162
|
-
notifyPtcMessages(blockRoot: RootHex, ptcIndices: number[], payloadPresent: boolean): void;
|
|
176
|
+
notifyPtcMessages(blockRoot: RootHex, slot: Slot, ptcIndices: number[], payloadPresent: boolean, blobDataAvailable: boolean): void;
|
|
163
177
|
getPTCVotes(blockRootHex: RootHex): BitArray | null;
|
|
164
178
|
/**
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
179
|
+
* Raw PTC vote tallies for a block root, for the debug fork choice endpoint.
|
|
180
|
+
* Returns `null` for pre-Gloas (or pruned) roots, which have no vote maps.
|
|
181
|
+
*/
|
|
182
|
+
getPTCVoteCounts(blockRootHex: RootHex): {
|
|
183
|
+
attesterCount: number;
|
|
184
|
+
payloadPresentCount: number;
|
|
185
|
+
dataAvailableCount: number;
|
|
186
|
+
} | null;
|
|
187
|
+
getPreviousProposerBoostRoot(): RootHex;
|
|
188
|
+
/**
|
|
189
|
+
* Timeliness votes per PTC position, `null` where the member has not attested.
|
|
190
|
+
* Returns `null` if the block is unknown or not a Gloas block.
|
|
191
|
+
*/
|
|
192
|
+
getPayloadTimelinessVotes(blockRootHex: RootHex): (boolean | null)[] | null;
|
|
193
|
+
/**
|
|
194
|
+
* Data-availability votes per PTC position, `null` where the member has not attested.
|
|
195
|
+
* Returns `null` if the block is unknown or not a Gloas block.
|
|
196
|
+
*/
|
|
197
|
+
getPayloadDataAvailabilityVotes(blockRootHex: RootHex): (boolean | null)[] | null;
|
|
198
|
+
private toAttendanceAwareVotes;
|
|
199
|
+
/**
|
|
200
|
+
* Spec: payload_timeliness(store, root, timely=True)
|
|
174
201
|
*/
|
|
175
202
|
isPayloadTimely(blockRoot: RootHex): boolean;
|
|
203
|
+
/**
|
|
204
|
+
* Spec: payload_timeliness(store, root, timely=False)
|
|
205
|
+
*/
|
|
206
|
+
isPayloadNotTimely(blockRoot: RootHex): boolean;
|
|
207
|
+
/**
|
|
208
|
+
* Spec: payload_data_availability(store, root, available=True)
|
|
209
|
+
*/
|
|
210
|
+
isPayloadDataAvailable(blockRoot: RootHex): boolean;
|
|
211
|
+
/**
|
|
212
|
+
* Spec: payload_data_availability(store, root, available=False)
|
|
213
|
+
*/
|
|
214
|
+
isPayloadDataNotAvailable(blockRoot: RootHex): boolean;
|
|
215
|
+
/**
|
|
216
|
+
* Spec: should_build_on_full(store, head)
|
|
217
|
+
*
|
|
218
|
+
* The proposer is forced to build on the EMPTY variant (effectively reorging)
|
|
219
|
+
* when the PTC majority voted that the blob data is not available or that the
|
|
220
|
+
* payload was not timely.
|
|
221
|
+
*/
|
|
222
|
+
shouldBuildOnFull(head: ProtoBlock, slot: Slot): boolean;
|
|
176
223
|
/**
|
|
177
224
|
* Check if parent node is FULL
|
|
178
225
|
* Spec: gloas/fork-choice.md#new-is_parent_node_full
|
|
@@ -185,7 +232,7 @@ export declare class ProtoArray {
|
|
|
185
232
|
* Spec: gloas/fork-choice.md#new-should_extend_payload
|
|
186
233
|
*
|
|
187
234
|
* Returns true if payload is verified (FULL variant exists) AND:
|
|
188
|
-
* 1. Payload is timely, OR
|
|
235
|
+
* 1. Payload is timely AND data is available, OR
|
|
189
236
|
* 2. No proposer boost root (empty/zero hash), OR
|
|
190
237
|
* 3. Proposer boost root's parent is not this block, OR
|
|
191
238
|
* 4. Proposer boost root extends FULL parent
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protoArray.d.ts","sourceRoot":"","sources":["../../src/protoArray/protoArray.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AAExC,OAAO,EAAC,sBAAsB,EAA8C,MAAM,4BAA4B,CAAC;AAC/G,OAAO,EAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAC,MAAM,iBAAiB,CAAC;AAGrD,OAAO,EAAC,YAAY,EAAyD,MAAM,aAAa,CAAC;AACjG,OAAO,EAGL,eAAe,EACf,sBAAsB,EACtB,aAAa,EACb,UAAU,EACV,SAAS,EAEV,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"protoArray.d.ts","sourceRoot":"","sources":["../../src/protoArray/protoArray.ts"],"names":[],"mappings":"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"}
|