@lodestar/fork-choice 1.43.0-dev.4fb05c546d → 1.43.0-dev.549a5b8115
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/forkChoice.d.ts +21 -18
- package/lib/forkChoice/forkChoice.d.ts.map +1 -1
- package/lib/forkChoice/forkChoice.js +60 -66
- package/lib/forkChoice/forkChoice.js.map +1 -1
- package/lib/forkChoice/interface.d.ts +26 -8
- package/lib/forkChoice/interface.d.ts.map +1 -1
- package/lib/forkChoice/store.d.ts +16 -40
- package/lib/forkChoice/store.d.ts.map +1 -1
- package/lib/forkChoice/store.js +4 -22
- package/lib/forkChoice/store.js.map +1 -1
- package/lib/index.d.ts +3 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/protoArray/protoArray.d.ts +4 -1
- package/lib/protoArray/protoArray.d.ts.map +1 -1
- package/lib/protoArray/protoArray.js +14 -21
- package/lib/protoArray/protoArray.js.map +1 -1
- package/package.json +7 -7
- package/src/forkChoice/forkChoice.ts +75 -110
- package/src/forkChoice/interface.ts +27 -9
- package/src/forkChoice/store.ts +20 -52
- package/src/index.ts +3 -9
- package/src/protoArray/protoArray.ts +18 -33
|
@@ -2,7 +2,7 @@ import { DataAvailabilityStatus, EffectiveBalanceIncrements, IBeaconStateView }
|
|
|
2
2
|
import { AttesterSlashing, BeaconBlock, Epoch, IndexedAttestation, Root, RootHex, Slot } from "@lodestar/types";
|
|
3
3
|
import { BlockExecutionStatus, LVHExecResponse, PayloadExecutionStatus, PayloadStatus, ProtoBlock, ProtoNode } from "../protoArray/interface.js";
|
|
4
4
|
import { UpdateAndGetHeadOpt } from "./forkChoice.js";
|
|
5
|
-
import { CheckpointWithHex
|
|
5
|
+
import { CheckpointWithHex } from "./store.js";
|
|
6
6
|
export type CheckpointHex = {
|
|
7
7
|
epoch: Epoch;
|
|
8
8
|
root: RootHex;
|
|
@@ -11,11 +11,11 @@ export type CheckpointsWithHex = {
|
|
|
11
11
|
justifiedCheckpoint: CheckpointWithHex;
|
|
12
12
|
finalizedCheckpoint: CheckpointWithHex;
|
|
13
13
|
};
|
|
14
|
-
export type
|
|
15
|
-
checkpoint:
|
|
14
|
+
export type CheckpointWithBalance = {
|
|
15
|
+
checkpoint: CheckpointWithHex;
|
|
16
16
|
balances: EffectiveBalanceIncrements;
|
|
17
17
|
};
|
|
18
|
-
export type
|
|
18
|
+
export type CheckpointWithTotalBalance = CheckpointWithBalance & {
|
|
19
19
|
totalBalance: number;
|
|
20
20
|
};
|
|
21
21
|
export declare enum EpochDifference {
|
|
@@ -107,8 +107,8 @@ export interface IForkChoice {
|
|
|
107
107
|
* Retrieve all nodes for the debug API.
|
|
108
108
|
*/
|
|
109
109
|
getAllNodes(): ProtoNode[];
|
|
110
|
-
getFinalizedCheckpoint():
|
|
111
|
-
getJustifiedCheckpoint():
|
|
110
|
+
getFinalizedCheckpoint(): CheckpointWithHex;
|
|
111
|
+
getJustifiedCheckpoint(): CheckpointWithHex;
|
|
112
112
|
/**
|
|
113
113
|
* Add `block` to the fork choice DAG.
|
|
114
114
|
*
|
|
@@ -177,9 +177,8 @@ export interface IForkChoice {
|
|
|
177
177
|
* @param blockRoot - The beacon block root for which the payload arrived
|
|
178
178
|
* @param executionPayloadBlockHash - The block hash of the execution payload
|
|
179
179
|
* @param executionPayloadNumber - The block number of the execution payload
|
|
180
|
-
* @param executionPayloadStateRoot - The execution payload state root ie. the root of post-state after processExecutionPayloadEnvelope()
|
|
181
180
|
*/
|
|
182
|
-
onExecutionPayload(blockRoot: RootHex, executionPayloadBlockHash: RootHex, executionPayloadNumber: number,
|
|
181
|
+
onExecutionPayload(blockRoot: RootHex, executionPayloadBlockHash: RootHex, executionPayloadNumber: number, executionStatus: PayloadExecutionStatus, dataAvailabilityStatus: DataAvailabilityStatus): void;
|
|
183
182
|
/**
|
|
184
183
|
* Call `onTick` for all slots between `fcStore.getCurrentSlot()` and the provided `currentSlot`.
|
|
185
184
|
*/
|
|
@@ -205,6 +204,7 @@ export interface IForkChoice {
|
|
|
205
204
|
hasPayloadUnsafe(blockRoot: Root): boolean;
|
|
206
205
|
hasPayloadHexUnsafe(blockRoot: RootHex): boolean;
|
|
207
206
|
getSlotsPresent(windowStart: number): number;
|
|
207
|
+
getPTCVotes(blockRootHex: RootHex): (boolean | null)[] | null;
|
|
208
208
|
/**
|
|
209
209
|
* Returns a `ProtoBlock` if the block is known **and** a descendant of the finalized root.
|
|
210
210
|
*/
|
|
@@ -240,11 +240,23 @@ export interface IForkChoice {
|
|
|
240
240
|
getAllNonAncestorBlocks(blockRoot: RootHex, payloadStatus: PayloadStatus): ProtoBlock[];
|
|
241
241
|
/**
|
|
242
242
|
* Returns both ancestor and non-ancestor blocks in a single traversal.
|
|
243
|
+
*
|
|
244
|
+
* `ancestors` is the raw walk and includes the previous finalized block as its last element —
|
|
245
|
+
* callers that don't want the boundary should slice it off themselves.
|
|
243
246
|
*/
|
|
244
247
|
getAllAncestorAndNonAncestorBlocks(blockRoot: RootHex, payloadStatus: PayloadStatus): {
|
|
245
248
|
ancestors: ProtoBlock[];
|
|
246
249
|
nonAncestors: ProtoBlock[];
|
|
247
250
|
};
|
|
251
|
+
/**
|
|
252
|
+
* Same as `getAllAncestorAndNonAncestorBlocks` but resolves the default payload-status variant
|
|
253
|
+
* (FULL pre-Gloas, PENDING for Gloas) for the given root. Use when the caller holds a
|
|
254
|
+
* `CheckpointWithHex` / finalized root without a specific payload-status variant in mind.
|
|
255
|
+
*/
|
|
256
|
+
getAllAncestorAndNonAncestorBlocksDefaultStatus(blockRoot: RootHex): {
|
|
257
|
+
ancestors: ProtoBlock[];
|
|
258
|
+
nonAncestors: ProtoBlock[];
|
|
259
|
+
};
|
|
248
260
|
getCanonicalBlockByRoot(blockRoot: Root): ProtoBlock | null;
|
|
249
261
|
getCanonicalBlockAtSlot(slot: Slot): ProtoBlock | null;
|
|
250
262
|
getCanonicalBlockClosestLteSlot(slot: Slot): ProtoBlock | null;
|
|
@@ -256,6 +268,12 @@ export interface IForkChoice {
|
|
|
256
268
|
* Iterates forward descendants of blockRoot. Does not yield blockRoot itself
|
|
257
269
|
*/
|
|
258
270
|
forwardIterateDescendants(blockRoot: RootHex, payloadStatus: PayloadStatus): IterableIterator<ProtoBlock>;
|
|
271
|
+
/**
|
|
272
|
+
* Same as `forwardIterateDescendants` but resolves the default payload-status variant
|
|
273
|
+
* (FULL pre-Gloas, PENDING for Gloas) for the given root. Use when the caller holds a
|
|
274
|
+
* `CheckpointWithHex` / finalized root without a specific payload-status variant in mind.
|
|
275
|
+
*/
|
|
276
|
+
forwardIterateDescendantsDefaultStatus(blockRoot: RootHex): IterableIterator<ProtoBlock>;
|
|
259
277
|
getBlockSummariesByParentRoot(parentRoot: RootHex): ProtoBlock[];
|
|
260
278
|
getBlockSummariesAtSlot(slot: Slot): ProtoBlock[];
|
|
261
279
|
/** Returns the distance of common ancestor of nodes to the max of the newNode and the prevNode. */
|
|
@@ -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,EAAC,gBAAgB,EAAE,WAAW,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAC,MAAM,iBAAiB,CAAC;AAC9G,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,sBAAsB,EACtB,aAAa,EACb,UAAU,EACV,SAAS,EACV,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAC,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAC,iBAAiB,
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/forkChoice/interface.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { EffectiveBalanceIncrements, IBeaconStateView } from "@lodestar/state-transition";
|
|
2
2
|
import { RootHex, Slot, ValidatorIndex, phase0 } from "@lodestar/types";
|
|
3
|
-
import {
|
|
4
|
-
import { CheckpointWithPayloadAndBalance, CheckpointWithPayloadAndTotalBalance } from "./interface.js";
|
|
3
|
+
import { CheckpointWithBalance, CheckpointWithTotalBalance } from "./interface.js";
|
|
5
4
|
/**
|
|
6
5
|
* Stores checkpoints in a hybrid format:
|
|
7
6
|
* - Original checkpoint for fast consumption in Lodestar's side
|
|
@@ -10,16 +9,6 @@ import { CheckpointWithPayloadAndBalance, CheckpointWithPayloadAndTotalBalance }
|
|
|
10
9
|
export type CheckpointWithHex = phase0.Checkpoint & {
|
|
11
10
|
rootHex: RootHex;
|
|
12
11
|
};
|
|
13
|
-
/**
|
|
14
|
-
* Checkpoint with payload status for Gloas fork choice.
|
|
15
|
-
* Used to track which variant (EMPTY or FULL) of the finalized/justified block to use.
|
|
16
|
-
*
|
|
17
|
-
* Pre-Gloas: payloadStatus is always FULL (payload embedded in block)
|
|
18
|
-
* Gloas: determined by state.execution_payload_availability
|
|
19
|
-
*/
|
|
20
|
-
export type CheckpointWithPayloadStatus = CheckpointWithHex & {
|
|
21
|
-
payloadStatus: PayloadStatus;
|
|
22
|
-
};
|
|
23
12
|
export type JustifiedBalances = EffectiveBalanceIncrements;
|
|
24
13
|
/**
|
|
25
14
|
* Returns the justified balances of checkpoint.
|
|
@@ -27,7 +16,7 @@ export type JustifiedBalances = EffectiveBalanceIncrements;
|
|
|
27
16
|
* `blockState` is maybe used as a fallback state to get balances since it's very close to desired justified state.
|
|
28
17
|
* @param blockState state that declares justified checkpoint `checkpoint`
|
|
29
18
|
*/
|
|
30
|
-
export type JustifiedBalancesGetter = (checkpoint:
|
|
19
|
+
export type JustifiedBalancesGetter = (checkpoint: CheckpointWithHex, blockState: IBeaconStateView) => JustifiedBalances;
|
|
31
20
|
/**
|
|
32
21
|
* Approximates the `Store` in "Ethereum Consensus -- Beacon Chain Fork Choice":
|
|
33
22
|
*
|
|
@@ -42,11 +31,11 @@ export type JustifiedBalancesGetter = (checkpoint: CheckpointWithPayloadStatus,
|
|
|
42
31
|
*/
|
|
43
32
|
export interface IForkChoiceStore {
|
|
44
33
|
currentSlot: Slot;
|
|
45
|
-
get justified():
|
|
46
|
-
set justified(justified:
|
|
47
|
-
unrealizedJustified:
|
|
48
|
-
finalizedCheckpoint:
|
|
49
|
-
unrealizedFinalizedCheckpoint:
|
|
34
|
+
get justified(): CheckpointWithTotalBalance;
|
|
35
|
+
set justified(justified: CheckpointWithBalance);
|
|
36
|
+
unrealizedJustified: CheckpointWithBalance;
|
|
37
|
+
finalizedCheckpoint: CheckpointWithHex;
|
|
38
|
+
unrealizedFinalizedCheckpoint: CheckpointWithHex;
|
|
50
39
|
justifiedBalancesGetter: JustifiedBalancesGetter;
|
|
51
40
|
equivocatingIndices: Set<ValidatorIndex>;
|
|
52
41
|
}
|
|
@@ -56,35 +45,22 @@ export interface IForkChoiceStore {
|
|
|
56
45
|
export declare class ForkChoiceStore implements IForkChoiceStore {
|
|
57
46
|
private readonly events?;
|
|
58
47
|
private _justified;
|
|
59
|
-
unrealizedJustified:
|
|
48
|
+
unrealizedJustified: CheckpointWithBalance;
|
|
60
49
|
private _finalizedCheckpoint;
|
|
61
|
-
unrealizedFinalizedCheckpoint:
|
|
50
|
+
unrealizedFinalizedCheckpoint: CheckpointWithHex;
|
|
62
51
|
equivocatingIndices: Set<number>;
|
|
63
52
|
justifiedBalancesGetter: JustifiedBalancesGetter;
|
|
64
53
|
currentSlot: Slot;
|
|
65
|
-
constructor(currentSlot: Slot, justifiedCheckpoint: phase0.Checkpoint, finalizedCheckpoint: phase0.Checkpoint, justifiedBalances: EffectiveBalanceIncrements, justifiedBalancesGetter: JustifiedBalancesGetter,
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
* Pre-Gloas: always FULL
|
|
69
|
-
* Gloas: determined by state.execution_payload_availability
|
|
70
|
-
*/
|
|
71
|
-
justifiedPayloadStatus: PayloadStatus,
|
|
72
|
-
/**
|
|
73
|
-
* Payload status for finalized checkpoint.
|
|
74
|
-
* Pre-Gloas: always FULL
|
|
75
|
-
* Gloas: determined by state.execution_payload_availability
|
|
76
|
-
*/
|
|
77
|
-
finalizedPayloadStatus: PayloadStatus, events?: {
|
|
78
|
-
onJustified: (cp: CheckpointWithPayloadStatus) => void;
|
|
79
|
-
onFinalized: (cp: CheckpointWithPayloadStatus) => void;
|
|
54
|
+
constructor(currentSlot: Slot, justifiedCheckpoint: phase0.Checkpoint, finalizedCheckpoint: phase0.Checkpoint, justifiedBalances: EffectiveBalanceIncrements, justifiedBalancesGetter: JustifiedBalancesGetter, events?: {
|
|
55
|
+
onJustified: (cp: CheckpointWithHex) => void;
|
|
56
|
+
onFinalized: (cp: CheckpointWithHex) => void;
|
|
80
57
|
} | undefined);
|
|
81
|
-
get justified():
|
|
82
|
-
set justified(justified:
|
|
83
|
-
get finalizedCheckpoint():
|
|
84
|
-
set finalizedCheckpoint(checkpoint:
|
|
58
|
+
get justified(): CheckpointWithTotalBalance;
|
|
59
|
+
set justified(justified: CheckpointWithBalance);
|
|
60
|
+
get finalizedCheckpoint(): CheckpointWithHex;
|
|
61
|
+
set finalizedCheckpoint(checkpoint: CheckpointWithHex);
|
|
85
62
|
}
|
|
86
63
|
export declare function toCheckpointWithHex(checkpoint: phase0.Checkpoint): CheckpointWithHex;
|
|
87
|
-
export declare function toCheckpointWithPayload(checkpoint: phase0.Checkpoint, payloadStatus: PayloadStatus): CheckpointWithPayloadStatus;
|
|
88
64
|
export declare function equalCheckpointWithHex(a: CheckpointWithHex, b: CheckpointWithHex): boolean;
|
|
89
65
|
export declare function computeTotalBalance(balances: EffectiveBalanceIncrements): number;
|
|
90
66
|
//# sourceMappingURL=store.d.ts.map
|
|
@@ -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,
|
|
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,gBAAgB;IAC/B,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;IAepD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAd1B,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;IAElB,YACE,WAAW,EAAE,IAAI,EACjB,mBAAmB,EAAE,MAAM,CAAC,UAAU,EACtC,mBAAmB,EAAE,MAAM,CAAC,UAAU,EACtC,iBAAiB,EAAE,0BAA0B,EAC7C,uBAAuB,EAAE,uBAAuB,EAC/B,MAAM,CAAC;;;iBAGvB,EAaF;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,30 +11,18 @@ export class ForkChoiceStore {
|
|
|
11
11
|
equivocatingIndices = new Set();
|
|
12
12
|
justifiedBalancesGetter;
|
|
13
13
|
currentSlot;
|
|
14
|
-
constructor(currentSlot, justifiedCheckpoint, finalizedCheckpoint, justifiedBalances, justifiedBalancesGetter,
|
|
15
|
-
/**
|
|
16
|
-
* Payload status for justified checkpoint.
|
|
17
|
-
* Pre-Gloas: always FULL
|
|
18
|
-
* Gloas: determined by state.execution_payload_availability
|
|
19
|
-
*/
|
|
20
|
-
justifiedPayloadStatus,
|
|
21
|
-
/**
|
|
22
|
-
* Payload status for finalized checkpoint.
|
|
23
|
-
* Pre-Gloas: always FULL
|
|
24
|
-
* Gloas: determined by state.execution_payload_availability
|
|
25
|
-
*/
|
|
26
|
-
finalizedPayloadStatus, events) {
|
|
14
|
+
constructor(currentSlot, justifiedCheckpoint, finalizedCheckpoint, justifiedBalances, justifiedBalancesGetter, events) {
|
|
27
15
|
this.events = events;
|
|
28
16
|
this.justifiedBalancesGetter = justifiedBalancesGetter;
|
|
29
17
|
this.currentSlot = currentSlot;
|
|
30
18
|
const justified = {
|
|
31
|
-
checkpoint:
|
|
19
|
+
checkpoint: toCheckpointWithHex(justifiedCheckpoint),
|
|
32
20
|
balances: justifiedBalances,
|
|
33
21
|
totalBalance: computeTotalBalance(justifiedBalances),
|
|
34
22
|
};
|
|
35
23
|
this._justified = justified;
|
|
36
24
|
this.unrealizedJustified = justified;
|
|
37
|
-
this._finalizedCheckpoint =
|
|
25
|
+
this._finalizedCheckpoint = toCheckpointWithHex(finalizedCheckpoint);
|
|
38
26
|
this.unrealizedFinalizedCheckpoint = this._finalizedCheckpoint;
|
|
39
27
|
}
|
|
40
28
|
get justified() {
|
|
@@ -48,7 +36,7 @@ export class ForkChoiceStore {
|
|
|
48
36
|
return this._finalizedCheckpoint;
|
|
49
37
|
}
|
|
50
38
|
set finalizedCheckpoint(checkpoint) {
|
|
51
|
-
const cp =
|
|
39
|
+
const cp = toCheckpointWithHex(checkpoint);
|
|
52
40
|
this._finalizedCheckpoint = cp;
|
|
53
41
|
this.events?.onFinalized(cp);
|
|
54
42
|
}
|
|
@@ -63,12 +51,6 @@ export function toCheckpointWithHex(checkpoint) {
|
|
|
63
51
|
rootHex: toRootHex(root),
|
|
64
52
|
};
|
|
65
53
|
}
|
|
66
|
-
export function toCheckpointWithPayload(checkpoint, payloadStatus) {
|
|
67
|
-
return {
|
|
68
|
-
...toCheckpointWithHex(checkpoint),
|
|
69
|
-
payloadStatus,
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
54
|
export function equalCheckpointWithHex(a, b) {
|
|
73
55
|
return a.epoch === b.epoch && a.rootHex === b.rootHex;
|
|
74
56
|
}
|
|
@@ -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":"AAEA,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AA8C1C;;GAEG;AACH,MAAM,OAAO,eAAe;IAeP,MAAM;IAdjB,UAAU,CAA6B;IAC/C,mBAAmB,CAAwB;IACnC,oBAAoB,CAAoB;IAChD,6BAA6B,CAAoB;IACjD,mBAAmB,GAAG,IAAI,GAAG,EAAkB,CAAC;IAChD,uBAAuB,CAA0B;IACjD,WAAW,CAAO;IAElB,YACE,WAAiB,EACjB,mBAAsC,EACtC,mBAAsC,EACtC,iBAA6C,EAC7C,uBAAgD,EAC/B,MAGhB,EACD;sBAJiB,MAAM;QAKvB,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;QACvD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,MAAM,SAAS,GAAG;YAChB,UAAU,EAAE,mBAAmB,CAAC,mBAAmB,CAAC;YACpD,QAAQ,EAAE,iBAAiB;YAC3B,YAAY,EAAE,mBAAmB,CAAC,iBAAiB,CAAC;SACrD,CAAC;QACF,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;QACrC,IAAI,CAAC,oBAAoB,GAAG,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;QACrE,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,oBAAoB,CAAC;IAAA,CAChE;IAED,IAAI,SAAS,GAA+B;QAC1C,OAAO,IAAI,CAAC,UAAU,CAAC;IAAA,CACxB;IACD,IAAI,SAAS,CAAC,SAAgC,EAAE;QAC9C,IAAI,CAAC,UAAU,GAAG,EAAC,GAAG,SAAS,EAAE,YAAY,EAAE,mBAAmB,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAC,CAAC;QACxF,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAAA,CAChD;IAED,IAAI,mBAAmB,GAAsB;QAC3C,OAAO,IAAI,CAAC,oBAAoB,CAAC;IAAA,CAClC;IACD,IAAI,mBAAmB,CAAC,UAA6B,EAAE;QACrD,MAAM,EAAE,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;IAAA,CAC9B;CACF;AAED,MAAM,UAAU,mBAAmB,CAAC,UAA6B,EAAqB;IACpF,uFAAuF;IACvF,wDAAwD;IACxD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;IAC7B,OAAO;QACL,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,IAAI;QACJ,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC;KACzB,CAAC;AAAA,CACH;AAED,MAAM,UAAU,sBAAsB,CAAC,CAAoB,EAAE,CAAoB,EAAW;IAC1F,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC;AAAA,CACvD;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAoC,EAAU;IAChF,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,YAAY,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,YAAY,CAAC;AAAA,CACrB"}
|
package/lib/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export { ForkChoiceError, ForkChoiceErrorCode, type InvalidAttestation, InvalidAttestationCode, type InvalidBlock, InvalidBlockCode, } from "./forkChoice/errors.js";
|
|
2
|
-
export { ForkChoice, type ForkChoiceOpts, UpdateHeadOpt
|
|
3
|
-
export { type AncestorResult, AncestorStatus, type
|
|
2
|
+
export { ForkChoice, type ForkChoiceOpts, UpdateHeadOpt } from "./forkChoice/forkChoice.js";
|
|
3
|
+
export { type AncestorResult, AncestorStatus, type CheckpointWithBalance, type CheckpointWithTotalBalance, EpochDifference, type IForkChoice, NotReorgedReason, } from "./forkChoice/interface.js";
|
|
4
4
|
export * from "./forkChoice/safeBlocks.js";
|
|
5
|
-
export { type CheckpointWithHex,
|
|
5
|
+
export { type CheckpointWithHex, ForkChoiceStore, type IForkChoiceStore, type JustifiedBalancesGetter, } from "./forkChoice/store.js";
|
|
6
6
|
export { type ForkChoiceMetrics, getForkChoiceMetrics } from "./metrics.js";
|
|
7
7
|
export type { BlockExecutionStatus, BlockExtraMeta, LVHInvalidResponse, LVHValidResponse, PayloadExecutionStatus, ProtoBlock, ProtoNode, } from "./protoArray/interface.js";
|
|
8
8
|
export { ExecutionStatus, PayloadStatus, isGloasBlock } from "./protoArray/interface.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,
|
|
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"}
|
package/lib/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { ForkChoiceError, ForkChoiceErrorCode, InvalidAttestationCode, InvalidBlockCode, } from "./forkChoice/errors.js";
|
|
2
|
-
export { ForkChoice, UpdateHeadOpt
|
|
2
|
+
export { ForkChoice, UpdateHeadOpt } from "./forkChoice/forkChoice.js";
|
|
3
3
|
export { AncestorStatus, EpochDifference, NotReorgedReason, } from "./forkChoice/interface.js";
|
|
4
4
|
export * from "./forkChoice/safeBlocks.js";
|
|
5
5
|
export { ForkChoiceStore, } from "./forkChoice/store.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,
|
|
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,3 +1,5 @@
|
|
|
1
|
+
import { BitArray } from "@chainsafe/ssz";
|
|
2
|
+
import { DataAvailabilityStatus } from "@lodestar/state-transition";
|
|
1
3
|
import { Epoch, RootHex, Slot } from "@lodestar/types";
|
|
2
4
|
import { LVHExecError } from "./errors.js";
|
|
3
5
|
import { LVHExecResponse, PayloadExecutionStatus, PayloadStatus, ProtoBlock, ProtoNode } from "./interface.js";
|
|
@@ -143,7 +145,7 @@ export declare class ProtoArray {
|
|
|
143
145
|
*
|
|
144
146
|
* Spec: gloas/fork-choice.md (on_execution_payload event)
|
|
145
147
|
*/
|
|
146
|
-
onExecutionPayload(blockRoot: RootHex, currentSlot: Slot, executionPayloadBlockHash: RootHex, executionPayloadNumber: number,
|
|
148
|
+
onExecutionPayload(blockRoot: RootHex, currentSlot: Slot, executionPayloadBlockHash: RootHex, executionPayloadNumber: number, proposerBoostRoot: RootHex | null, executionStatus: PayloadExecutionStatus, dataAvailabilityStatus: DataAvailabilityStatus): void;
|
|
147
149
|
/**
|
|
148
150
|
* Update PTC votes for multiple validators attesting to a block
|
|
149
151
|
* Spec: gloas/fork-choice.md#new-on_payload_attestation_message
|
|
@@ -153,6 +155,7 @@ export declare class ProtoArray {
|
|
|
153
155
|
* @param payloadPresent - Whether the validators attest the payload is present
|
|
154
156
|
*/
|
|
155
157
|
notifyPtcMessages(blockRoot: RootHex, ptcIndices: number[], payloadPresent: boolean): void;
|
|
158
|
+
getPTCVotes(blockRootHex: RootHex): BitArray | null;
|
|
156
159
|
/**
|
|
157
160
|
* Check if execution payload for a block is timely
|
|
158
161
|
* Spec: gloas/fork-choice.md#new-is_payload_timely
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protoArray.d.ts","sourceRoot":"","sources":["../../src/protoArray/protoArray.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"protoArray.d.ts","sourceRoot":"","sources":["../../src/protoArray/protoArray.ts"],"names":[],"mappings":"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"}
|
|
@@ -63,20 +63,6 @@ export class ProtoArray {
|
|
|
63
63
|
// We are using the blockROot as the targetRoot, since it always lies on an epoch boundary
|
|
64
64
|
targetRoot: block.blockRoot,
|
|
65
65
|
}, currentSlot, null);
|
|
66
|
-
// Anchor block PTC votes must be all-true per spec get_forkchoice_store:
|
|
67
|
-
// payload_timeliness_vote={anchor_root: Vector[boolean, PTC_SIZE](True for _ in range(PTC_SIZE))}
|
|
68
|
-
// Spec: https://github.com/ethereum/consensus-specs/blob/v1.7.0-alpha.4/specs/gloas/fork-choice.md#modified-get_forkchoice_store
|
|
69
|
-
if (protoArray.ptcVotes.has(block.blockRoot)) {
|
|
70
|
-
protoArray.ptcVotes.set(block.blockRoot, BitArray.fromBoolArray(Array.from({ length: PTC_SIZE }, () => true)));
|
|
71
|
-
// In the spec, we have payload_states = {anchor_root: anchor_state.copy()}
|
|
72
|
-
// which means the anchor's "payload" is considered received
|
|
73
|
-
// Without FULL, blocks extending FULL from the anchor would be orphaned.
|
|
74
|
-
// TODO GLOAS: This is a bug in the spec. Keep this to pass the current spec test
|
|
75
|
-
// for now. Need to remove this when we work on v1.7.0-alpha.5
|
|
76
|
-
if (block.executionPayloadBlockHash !== null) {
|
|
77
|
-
protoArray.onExecutionPayload(block.blockRoot, currentSlot, block.executionPayloadBlockHash, block.executionPayloadNumber ?? 0, block.stateRoot, null, ExecutionStatus.Valid);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
66
|
return protoArray;
|
|
81
67
|
}
|
|
82
68
|
/**
|
|
@@ -442,7 +428,7 @@ export class ProtoArray {
|
|
|
442
428
|
*
|
|
443
429
|
* Spec: gloas/fork-choice.md (on_execution_payload event)
|
|
444
430
|
*/
|
|
445
|
-
onExecutionPayload(blockRoot, currentSlot, executionPayloadBlockHash, executionPayloadNumber,
|
|
431
|
+
onExecutionPayload(blockRoot, currentSlot, executionPayloadBlockHash, executionPayloadNumber, proposerBoostRoot, executionStatus, dataAvailabilityStatus) {
|
|
446
432
|
// First check if block exists
|
|
447
433
|
const variants = this.indices.get(blockRoot);
|
|
448
434
|
if (variants == null) {
|
|
@@ -478,7 +464,7 @@ export class ProtoArray {
|
|
|
478
464
|
index: pendingIndex,
|
|
479
465
|
});
|
|
480
466
|
}
|
|
481
|
-
// Create FULL variant as a child of PENDING (sibling to EMPTY)
|
|
467
|
+
// Create FULL variant as a child of PENDING (sibling to EMPTY).
|
|
482
468
|
const fullNode = {
|
|
483
469
|
...pendingNode,
|
|
484
470
|
parent: pendingIndex, // Points to own PENDING (same as EMPTY)
|
|
@@ -490,7 +476,7 @@ export class ProtoArray {
|
|
|
490
476
|
executionStatus,
|
|
491
477
|
executionPayloadBlockHash,
|
|
492
478
|
executionPayloadNumber,
|
|
493
|
-
|
|
479
|
+
dataAvailabilityStatus,
|
|
494
480
|
};
|
|
495
481
|
const fullIndex = this.nodes.length;
|
|
496
482
|
this.nodes.push(fullNode);
|
|
@@ -520,6 +506,14 @@ export class ProtoArray {
|
|
|
520
506
|
votes.set(ptcIndex, payloadPresent);
|
|
521
507
|
}
|
|
522
508
|
}
|
|
509
|
+
getPTCVotes(blockRootHex) {
|
|
510
|
+
const votes = this.ptcVotes.get(blockRootHex);
|
|
511
|
+
if (votes === undefined) {
|
|
512
|
+
// Block not found or not a Gloas block
|
|
513
|
+
return null;
|
|
514
|
+
}
|
|
515
|
+
return votes;
|
|
516
|
+
}
|
|
523
517
|
/**
|
|
524
518
|
* Check if execution payload for a block is timely
|
|
525
519
|
* Spec: gloas/fork-choice.md#new-is_payload_timely
|
|
@@ -1406,10 +1400,9 @@ export class ProtoArray {
|
|
|
1406
1400
|
}
|
|
1407
1401
|
const ancestors = [];
|
|
1408
1402
|
const nonAncestors = [];
|
|
1409
|
-
//
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
}
|
|
1403
|
+
// caller of this method may pass default status
|
|
1404
|
+
// this is the only node that we accept PENDING
|
|
1405
|
+
ancestors.push(node);
|
|
1413
1406
|
let nodeIndex = startIndex;
|
|
1414
1407
|
while (node.parent !== undefined) {
|
|
1415
1408
|
const parentIndex = this.getParentNodeIndex(node);
|