@lodestar/fork-choice 1.51.0-dev.32db66b396 → 1.51.0-dev.36022cc5cb
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/errors.d.ts +6 -1
- package/lib/forkChoice/errors.d.ts.map +1 -1
- package/lib/forkChoice/errors.js +1 -0
- package/lib/forkChoice/errors.js.map +1 -1
- package/lib/forkChoice/fastConfirmation/utils.d.ts.map +1 -1
- package/lib/forkChoice/fastConfirmation/utils.js +19 -24
- package/lib/forkChoice/fastConfirmation/utils.js.map +1 -1
- package/lib/forkChoice/forkChoice.d.ts +24 -19
- package/lib/forkChoice/forkChoice.d.ts.map +1 -1
- package/lib/forkChoice/forkChoice.js +97 -39
- package/lib/forkChoice/forkChoice.js.map +1 -1
- package/lib/forkChoice/interface.d.ts +18 -4
- package/lib/forkChoice/interface.d.ts.map +1 -1
- package/lib/metrics.d.ts +4 -0
- package/lib/metrics.d.ts.map +1 -1
- package/lib/metrics.js +9 -0
- package/lib/metrics.js.map +1 -1
- package/lib/protoArray/interface.d.ts +2 -0
- package/lib/protoArray/interface.d.ts.map +1 -1
- package/lib/protoArray/interface.js.map +1 -1
- package/lib/protoArray/protoArray.d.ts +35 -4
- package/lib/protoArray/protoArray.d.ts.map +1 -1
- package/lib/protoArray/protoArray.js +142 -51
- package/lib/protoArray/protoArray.js.map +1 -1
- package/package.json +8 -8
- package/src/forkChoice/errors.ts +3 -1
- package/src/forkChoice/fastConfirmation/utils.ts +21 -20
- package/src/forkChoice/forkChoice.ts +107 -41
- package/src/forkChoice/interface.ts +17 -5
- package/src/metrics.ts +9 -0
- package/src/protoArray/interface.ts +2 -0
- package/src/protoArray/protoArray.ts +164 -56
|
@@ -113,7 +113,7 @@ export interface IForkChoice {
|
|
|
113
113
|
* fcu call in `importBlock()` will be suppressed if this returns true. It is also
|
|
114
114
|
* called by `predictProposerHead()` during `prepareNextSlot()`.
|
|
115
115
|
*/
|
|
116
|
-
shouldOverrideForkChoiceUpdate(headBlock: ProtoBlock,
|
|
116
|
+
shouldOverrideForkChoiceUpdate(headBlock: ProtoBlock, msFromSlot: number, currentSlot: Slot): ShouldOverrideForkChoiceUpdateResult;
|
|
117
117
|
/**
|
|
118
118
|
* Retrieves all possible chain heads (leaves of fork choice tree).
|
|
119
119
|
*/
|
|
@@ -143,8 +143,11 @@ export interface IForkChoice {
|
|
|
143
143
|
* ## Notes:
|
|
144
144
|
*
|
|
145
145
|
* The supplied block **must** pass the `state_transition` function as it will not be run here.
|
|
146
|
+
*
|
|
147
|
+
* Throws `InvalidBlockCode.PARENT_EXECUTION_INVALID` if the parent payload chain was invalidated.
|
|
148
|
+
* `executionStatus` is ignored for a gloas block, it inherits the status of the parent variant it builds on.
|
|
146
149
|
*/
|
|
147
|
-
onBlock(block: BeaconBlock, state: IBeaconStateView,
|
|
150
|
+
onBlock(block: BeaconBlock, state: IBeaconStateView, receiveDelayMs: number, importDelayMs: number, currentSlot: Slot, executionStatus: BlockExecutionStatus, dataAvailabilityStatus: DataAvailabilityStatus): ProtoBlock;
|
|
148
151
|
/**
|
|
149
152
|
* Register `attestation` with the fork choice DAG so that it may influence future calls to `getHead`.
|
|
150
153
|
*
|
|
@@ -247,6 +250,12 @@ export interface IForkChoice {
|
|
|
247
250
|
shouldExtendPayload(blockRoot: RootHex): boolean;
|
|
248
251
|
/** Spec: should_build_on_full(store, head, slot) */
|
|
249
252
|
shouldBuildOnFull(head: ProtoBlock, slot: Slot): boolean;
|
|
253
|
+
/** Inclusion list verdict for the payload of `blockRoot`, as reported by the execution engine. True if it changed */
|
|
254
|
+
recordPayloadInclusionListSatisfaction(blockRoot: RootHex, satisfied: boolean): boolean;
|
|
255
|
+
/** True once the payload is delivered and not recorded unsatisfied */
|
|
256
|
+
isPayloadInclusionListSatisfied(blockRoot: RootHex): boolean;
|
|
257
|
+
/** Engine verdict recorded for the payload of `blockRoot`, null when none was recorded */
|
|
258
|
+
getPayloadInclusionListSatisfaction(blockRoot: RootHex): boolean | null;
|
|
250
259
|
getFinalizedBlock(): ProtoBlock;
|
|
251
260
|
getJustifiedBlock(): ProtoBlock;
|
|
252
261
|
getFinalizedCheckpointSlot(): Slot;
|
|
@@ -307,14 +316,19 @@ export interface IForkChoice {
|
|
|
307
316
|
* `CheckpointWithHex` / finalized root without a specific payload-status variant in mind.
|
|
308
317
|
*/
|
|
309
318
|
forwardIterateDescendantsDefaultStatus(blockRoot: RootHex): IterableIterator<ProtoBlock>;
|
|
319
|
+
/** One summary per block, its default variant (FULL pre-Gloas, PENDING for Gloas) */
|
|
310
320
|
getBlockSummariesByParentRoot(parentRoot: RootHex): ProtoBlock[];
|
|
321
|
+
/** One summary per block, its default variant (FULL pre-Gloas, PENDING for Gloas) */
|
|
311
322
|
getBlockSummariesAtSlot(slot: Slot): ProtoBlock[];
|
|
312
323
|
/** Returns the distance of common ancestor of nodes to the max of the newNode and the prevNode. */
|
|
313
324
|
getCommonAncestorDepth(prevBlock: ProtoBlock, newBlock: ProtoBlock): AncestorResult;
|
|
314
325
|
/**
|
|
315
|
-
*
|
|
326
|
+
* Apply an execution engine verdict with a latest valid hash, see `ProtoArray.validateLatestHash`.
|
|
327
|
+
* Returns whether any execution status changed. A consensus failure is recorded in `irrecoverableError`.
|
|
316
328
|
*/
|
|
317
|
-
validateLatestHash(execResponse: LVHExecResponse
|
|
329
|
+
validateLatestHash(execResponse: LVHExecResponse, opts?: {
|
|
330
|
+
strict?: boolean;
|
|
331
|
+
}): boolean;
|
|
318
332
|
/**
|
|
319
333
|
* A dependent root is the block root of the last block before the state transition that decided a specific shuffling
|
|
320
334
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/forkChoice/interface.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/forkChoice/interface.ts"],"names":[],"mappings":"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"}
|
package/lib/metrics.d.ts
CHANGED
|
@@ -23,10 +23,14 @@ export declare function getForkChoiceMetrics(register: MetricsRegisterExtra): {
|
|
|
23
23
|
caller: string;
|
|
24
24
|
}>;
|
|
25
25
|
requests: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
|
|
26
|
+
unsatisfiedInclusionListBlocks: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
|
|
26
27
|
errors: import("@lodestar/utils").GaugeExtra<{
|
|
27
28
|
entrypoint: UpdateHeadOpt;
|
|
28
29
|
}>;
|
|
29
30
|
changedHead: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
|
|
31
|
+
executionInvalidations: import("@lodestar/utils").GaugeExtra<{
|
|
32
|
+
source: string;
|
|
33
|
+
}>;
|
|
30
34
|
reorg: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
|
|
31
35
|
reorgDistance: import("@lodestar/utils").Histogram<import("@lodestar/utils").NoLabels>;
|
|
32
36
|
votes: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
|
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,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;;;;;;;;;;;;;;;;QAI7D,QAAQ;oBAA8B,MAAM;;QAM5C,QAAQ;QAIR,MAAM;wBAA8B,aAAa;;QAKjD,WAAW;QAIX,KAAK;QAIL,aAAa;QAOb,KAAK;QAIL,kBAAkB;QAIlB,yBAAyB;QAIzB,cAAc;QAId,KAAK;QAIL,OAAO;QAIP,gBAAgB;oBAA4B,gBAAgB;;QAK5D,SAAS;qBAA6B,MAAM,GAAG,OAAO;;QAKtD,aAAa;YACX,QAAQ;YAKR,WAAW;YAIX,eAAe;YAIf,sBAAsB;YAItB,qBAAqB;YAIrB,qBAAqB;YAIrB,uBAAuB;YAIvB,iBAAiB;;;EAOxB"}
|
|
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;;;;;;;;;;;;;;;;QAI7D,QAAQ;oBAA8B,MAAM;;QAM5C,QAAQ;QAIR,8BAA8B;QAI9B,MAAM;wBAA8B,aAAa;;QAKjD,WAAW;QAIX,sBAAsB;oBAA0B,MAAM;;QAKtD,KAAK;QAIL,aAAa;QAOb,KAAK;QAIL,kBAAkB;QAIlB,yBAAyB;QAIzB,cAAc;QAId,KAAK;QAIL,OAAO;QAIP,gBAAgB;oBAA4B,gBAAgB;;QAK5D,SAAS;qBAA6B,MAAM,GAAG,OAAO;;QAKtD,aAAa;YACX,QAAQ;YAKR,WAAW;YAIX,eAAe;YAIf,sBAAsB;YAItB,qBAAqB;YAIrB,qBAAqB;YAIrB,uBAAuB;YAIvB,iBAAiB;;;EAOxB"}
|
package/lib/metrics.js
CHANGED
|
@@ -13,6 +13,10 @@ export function getForkChoiceMetrics(register) {
|
|
|
13
13
|
name: "beacon_fork_choice_requests_total",
|
|
14
14
|
help: "Count of occasions where fork choice has tried to find a head",
|
|
15
15
|
}),
|
|
16
|
+
unsatisfiedInclusionListBlocks: register.gauge({
|
|
17
|
+
name: "beacon_fork_choice_unsatisfied_inclusion_list_blocks_total",
|
|
18
|
+
help: "Count of payloads not extended because they did not satisfy the inclusion list constraints",
|
|
19
|
+
}),
|
|
16
20
|
errors: register.gauge({
|
|
17
21
|
name: "beacon_fork_choice_errors_total",
|
|
18
22
|
help: "Count of occasions where fork choice has returned an error when trying to find a head",
|
|
@@ -22,6 +26,11 @@ export function getForkChoiceMetrics(register) {
|
|
|
22
26
|
name: "beacon_fork_choice_changed_head_total",
|
|
23
27
|
help: "Count of occasions fork choice has found a new head",
|
|
24
28
|
}),
|
|
29
|
+
executionInvalidations: register.gauge({
|
|
30
|
+
name: "beacon_fork_choice_execution_invalidations_total",
|
|
31
|
+
help: "Count of execution engine INVALID verdicts applied to fork choice, by verdict source",
|
|
32
|
+
labelNames: ["source"],
|
|
33
|
+
}),
|
|
25
34
|
reorg: register.gauge({
|
|
26
35
|
name: "beacon_fork_choice_reorg_total",
|
|
27
36
|
help: "Count of occasions fork choice has switched to a different chain",
|
package/lib/metrics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -46,6 +46,8 @@ export declare function isGloasBlock(block: ProtoBlock): block is ProtoBlock & {
|
|
|
46
46
|
export type LVHValidResponse = {
|
|
47
47
|
executionStatus: ExecutionStatus.Valid;
|
|
48
48
|
latestValidExecHash: RootHex;
|
|
49
|
+
/** Resolves the exact node to validate when several nodes carry the same payload hash (gloas variants) */
|
|
50
|
+
blockRoot?: RootHex;
|
|
49
51
|
};
|
|
50
52
|
export type LVHInvalidResponse = {
|
|
51
53
|
executionStatus: ExecutionStatus.Invalid;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/protoArray/interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,sBAAsB,EAAC,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAC,MAAM,iBAAiB,CAAC;AAIhF,eAAO,MAAM,aAAa,uEAAuE,CAAC;AAElG;;;;GAIG;AACH,eAAO,MAAM,eAAe,aAAa,CAAC;AAE1C;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B;;;;;;;;;;GAUG;AACH,oBAAY,eAAe;IACzB,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,OAAO,YAAY;CACpB;AAED;;;GAGG;AACH,oBAAY,aAAa;IACvB,OAAO,IAAI;IACX,KAAK,IAAI;IACT,IAAI,IAAI;CACT;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK,IAAI,UAAU,GAAG;IAAC,eAAe,EAAE,OAAO,CAAA;CAAC,CAEhG;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,eAAe,EAAE,eAAe,CAAC,KAAK,CAAC;IACvC,mBAAmB,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/protoArray/interface.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/protoArray/interface.ts"],"names":[],"mappings":"AAGA,oCAAoC;AACpC,2CAA2C;AAC3C,MAAM,CAAC,MAAM,aAAa,GAAG,oEAAoE,CAAC;AAElG;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;AAO1C;;;;;;;;;;GAUG;AACH,MAAM,CAAN,IAAY,eAKX;AALD,WAAY,eAAe;IACzB,kCAAe,CAAA;IACf,sCAAmB,CAAA;IACnB,wCAAqB,CAAA;IACrB,sCAAmB,CAAA;AACrB,CAAC,EALW,eAAe,KAAf,eAAe,QAK1B;AAED;;;GAGG;AACH,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,uDAAW,CAAA;IACX,mDAAS,CAAA;IACT,iDAAQ,CAAA;AACV,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAiB;IAC5C,OAAO,KAAK,CAAC,eAAe,KAAK,IAAI,CAAC;AACxC,CAAC;
|
|
1
|
+
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/protoArray/interface.ts"],"names":[],"mappings":"AAGA,oCAAoC;AACpC,2CAA2C;AAC3C,MAAM,CAAC,MAAM,aAAa,GAAG,oEAAoE,CAAC;AAElG;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;AAO1C;;;;;;;;;;GAUG;AACH,MAAM,CAAN,IAAY,eAKX;AALD,WAAY,eAAe;IACzB,kCAAe,CAAA;IACf,sCAAmB,CAAA;IACnB,wCAAqB,CAAA;IACrB,sCAAmB,CAAA;AACrB,CAAC,EALW,eAAe,KAAf,eAAe,QAK1B;AAED;;;GAGG;AACH,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,uDAAW,CAAA;IACX,mDAAS,CAAA;IACT,iDAAQ,CAAA;AACV,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAiB;IAC5C,OAAO,KAAK,CAAC,eAAe,KAAK,IAAI,CAAC;AACxC,CAAC;AA8ID;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,EAAC,cAAc,EAAE,iBAAiB,EAAY;IAC1E,IAAI,cAAc,KAAK,KAAK,IAAI,iBAAiB,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAC1E,IAAI,cAAc,KAAK,IAAI,IAAI,iBAAiB,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACvE,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -66,6 +66,11 @@ export declare class ProtoArray {
|
|
|
66
66
|
* when called with the negative parameter value.
|
|
67
67
|
*/
|
|
68
68
|
private ptcAttested;
|
|
69
|
+
/**
|
|
70
|
+
* Execution engine inclusion list verdict per block, recorded on payload import from heze.
|
|
71
|
+
* Spec: heze/fork-choice.md#modified-store (payload_inclusion_list_satisfaction)
|
|
72
|
+
*/
|
|
73
|
+
private payloadInclusionListSatisfaction;
|
|
69
74
|
constructor({ pruneThreshold, justifiedEpoch, justifiedRoot, finalizedEpoch, finalizedRoot, }: {
|
|
70
75
|
pruneThreshold: number;
|
|
71
76
|
justifiedEpoch: Epoch;
|
|
@@ -241,6 +246,16 @@ export declare class ProtoArray {
|
|
|
241
246
|
* Returns true if the parent payload status (determined by block.parentBlockHash) is FULL
|
|
242
247
|
*/
|
|
243
248
|
isParentNodeFull(block: ProtoBlock): boolean;
|
|
249
|
+
/** Spec: heze/fork-choice.md#new-record_payload_inclusion_list_satisfaction. Returns whether the verdict changed */
|
|
250
|
+
recordPayloadInclusionListSatisfaction(blockRoot: RootHex, satisfied: boolean): boolean;
|
|
251
|
+
/**
|
|
252
|
+
* Spec: heze/fork-choice.md#new-is_payload_inclusion_list_satisfied
|
|
253
|
+
*
|
|
254
|
+
* False until the payload is delivered. A delivered payload without a verdict is pre-heze, where
|
|
255
|
+
* no inclusion list constraints apply.
|
|
256
|
+
*/
|
|
257
|
+
isPayloadInclusionListSatisfied(blockRoot: RootHex): boolean;
|
|
258
|
+
getPayloadInclusionListSatisfaction(blockRoot: RootHex): boolean | null;
|
|
244
259
|
/**
|
|
245
260
|
* Determine if we should extend the payload (prefer FULL over EMPTY)
|
|
246
261
|
* Spec: gloas/fork-choice.md#new-should_extend_payload
|
|
@@ -256,11 +271,27 @@ export declare class ProtoArray {
|
|
|
256
271
|
*/
|
|
257
272
|
shouldExtendPayload(blockRoot: RootHex, proposerBoostRoot: RootHex | null): boolean;
|
|
258
273
|
/**
|
|
259
|
-
*
|
|
260
|
-
*
|
|
261
|
-
*
|
|
274
|
+
* Apply an execution engine verdict with a latest valid hash (LVH) to the tree. VALID flips Syncing nodes up to the
|
|
275
|
+
* LVH node. INVALID invalidates the node identified by `invalidateFromParentBlockRoot/Hash` and its ancestors up to
|
|
276
|
+
* the LVH node (exclusive), then every descendant. Returns whether any status changed.
|
|
277
|
+
*
|
|
278
|
+
* A null or unknown LVH means the engine only vouches for the queried payload being invalid: the queried node and
|
|
279
|
+
* the nodes that inherit that payload (gloas PENDING and EMPTY variants) are invalidated, nothing above them.
|
|
280
|
+
*
|
|
281
|
+
* `strict` keeps the consensus failure semantics for verdicts about a payload the engine just processed: a VALID
|
|
282
|
+
* or PreMerge node on the invalidated chain poisons the tree. Verdicts from forkchoiceUpdated or about an ancestor
|
|
283
|
+
* chain are applied with `strict: false`: a node the engine already validated is never invalidated and the justified
|
|
284
|
+
* node is never crossed. If the walk to the LVH meets either, the LVH is treated as unknown.
|
|
285
|
+
*/
|
|
286
|
+
validateLatestHash(execResponse: LVHExecResponse, currentSlot: Slot, { strict }?: {
|
|
287
|
+
strict?: boolean;
|
|
288
|
+
}): boolean;
|
|
289
|
+
/**
|
|
290
|
+
* Upper bound (exclusive) for invalidating from `fromIndex` when the engine gave no usable LVH: the parent of the
|
|
291
|
+
* last ancestor that still inherits the queried payload. Pre-gloas this is the parent of `fromIndex`. For a gloas
|
|
292
|
+
* EMPTY or PENDING node it reaches up to the FULL node that owns the payload. -1 when the chain reaches the root.
|
|
262
293
|
*/
|
|
263
|
-
|
|
294
|
+
private getUnknownLVHIndex;
|
|
264
295
|
private propagateValidExecutionStatusByIndex;
|
|
265
296
|
/**
|
|
266
297
|
* Gloas PENDING and EMPTY variants have no payload of their own, they inherit the execution status of
|
|
@@ -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,EAAE,cAAc,EAAC,MAAM,iBAAiB,CAAC;AAGrE,OAAO,EAAC,YAAY,EAAyD,MAAM,aAAa,CAAC;AACjG,OAAO,EAGL,eAAe,EACf,sBAAsB,EACtB,aAAa,EACb,UAAU,EACV,SAAS,EACT,SAAS,EAEV,MAAM,gBAAgB,CAAC;AAoBxB;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,GAAG,MAAM,CAYtE;AAQD,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,KAAK,aAAa,GAAG;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAAC;AAIpD,yEAAyE;AACzE,KAAK,oBAAoB,GAAG,MAAM,CAAC;AACnC;;;;GAIG;AACH,KAAK,mBAAmB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACvE,KAAK,cAAc,GAAG,oBAAoB,GAAG,mBAAmB,CAAC;AAEjE,qBAAa,UAAU;IAGrB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,KAAK,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,KAAK,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,KAAK,EAAE,SAAS,EAAE,CAAM;IACxB;;;;;;;;;OASG;IACH,OAAO,8BAAsC;IAC7C,QAAQ,CAAC,EAAE,YAAY,CAAC;IAExB,OAAO,CAAC,qBAAqB,CAA8B;IAC3D,sFAAsF;IACtF,OAAO,CAAC,iBAAiB,CAAwB;IAEjD;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB,CAAgC;IAC9D;;;;;OAKG;IACH,OAAO,CAAC,4BAA4B,CAAgC;IACpE;;;;;OAKG;IACH,OAAO,CAAC,WAAW,CAAgC;
|
|
1
|
+
{"version":3,"file":"protoArray.d.ts","sourceRoot":"","sources":["../../src/protoArray/protoArray.ts"],"names":[],"mappings":"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"}
|
|
@@ -93,6 +93,11 @@ export class ProtoArray {
|
|
|
93
93
|
* when called with the negative parameter value.
|
|
94
94
|
*/
|
|
95
95
|
ptcAttested = new Map();
|
|
96
|
+
/**
|
|
97
|
+
* Execution engine inclusion list verdict per block, recorded on payload import from heze.
|
|
98
|
+
* Spec: heze/fork-choice.md#modified-store (payload_inclusion_list_satisfaction)
|
|
99
|
+
*/
|
|
100
|
+
payloadInclusionListSatisfaction = new Map();
|
|
96
101
|
constructor({ pruneThreshold, justifiedEpoch, justifiedRoot, finalizedEpoch, finalizedRoot, }) {
|
|
97
102
|
this.pruneThreshold = pruneThreshold;
|
|
98
103
|
this.justifiedEpoch = justifiedEpoch;
|
|
@@ -766,6 +771,24 @@ export class ProtoArray {
|
|
|
766
771
|
isParentNodeFull(block) {
|
|
767
772
|
return this.getParentPayloadStatus(block) === PayloadStatus.FULL;
|
|
768
773
|
}
|
|
774
|
+
/** Spec: heze/fork-choice.md#new-record_payload_inclusion_list_satisfaction. Returns whether the verdict changed */
|
|
775
|
+
recordPayloadInclusionListSatisfaction(blockRoot, satisfied) {
|
|
776
|
+
const previous = this.payloadInclusionListSatisfaction.get(blockRoot);
|
|
777
|
+
this.payloadInclusionListSatisfaction.set(blockRoot, satisfied);
|
|
778
|
+
return previous !== satisfied;
|
|
779
|
+
}
|
|
780
|
+
/**
|
|
781
|
+
* Spec: heze/fork-choice.md#new-is_payload_inclusion_list_satisfied
|
|
782
|
+
*
|
|
783
|
+
* False until the payload is delivered. A delivered payload without a verdict is pre-heze, where
|
|
784
|
+
* no inclusion list constraints apply.
|
|
785
|
+
*/
|
|
786
|
+
isPayloadInclusionListSatisfied(blockRoot) {
|
|
787
|
+
return this.hasPayload(blockRoot) && this.payloadInclusionListSatisfaction.get(blockRoot) !== false;
|
|
788
|
+
}
|
|
789
|
+
getPayloadInclusionListSatisfaction(blockRoot) {
|
|
790
|
+
return this.payloadInclusionListSatisfaction.get(blockRoot) ?? null;
|
|
791
|
+
}
|
|
769
792
|
/**
|
|
770
793
|
* Determine if we should extend the payload (prefer FULL over EMPTY)
|
|
771
794
|
* Spec: gloas/fork-choice.md#new-should_extend_payload
|
|
@@ -783,6 +806,9 @@ export class ProtoArray {
|
|
|
783
806
|
if (!this.hasPayload(blockRoot)) {
|
|
784
807
|
return false;
|
|
785
808
|
}
|
|
809
|
+
if (this.payloadInclusionListSatisfaction.get(blockRoot) === false) {
|
|
810
|
+
return false;
|
|
811
|
+
}
|
|
786
812
|
// Condition 1: Payload is timely AND data is available
|
|
787
813
|
if (this.isPayloadTimely(blockRoot) && this.isPayloadDataAvailable(blockRoot)) {
|
|
788
814
|
return true;
|
|
@@ -810,12 +836,19 @@ export class ProtoArray {
|
|
|
810
836
|
return false;
|
|
811
837
|
}
|
|
812
838
|
/**
|
|
813
|
-
*
|
|
814
|
-
*
|
|
815
|
-
*
|
|
839
|
+
* Apply an execution engine verdict with a latest valid hash (LVH) to the tree. VALID flips Syncing nodes up to the
|
|
840
|
+
* LVH node. INVALID invalidates the node identified by `invalidateFromParentBlockRoot/Hash` and its ancestors up to
|
|
841
|
+
* the LVH node (exclusive), then every descendant. Returns whether any status changed.
|
|
842
|
+
*
|
|
843
|
+
* A null or unknown LVH means the engine only vouches for the queried payload being invalid: the queried node and
|
|
844
|
+
* the nodes that inherit that payload (gloas PENDING and EMPTY variants) are invalidated, nothing above them.
|
|
845
|
+
*
|
|
846
|
+
* `strict` keeps the consensus failure semantics for verdicts about a payload the engine just processed: a VALID
|
|
847
|
+
* or PreMerge node on the invalidated chain poisons the tree. Verdicts from forkchoiceUpdated or about an ancestor
|
|
848
|
+
* chain are applied with `strict: false`: a node the engine already validated is never invalidated and the justified
|
|
849
|
+
* node is never crossed. If the walk to the LVH meets either, the LVH is treated as unknown.
|
|
816
850
|
*/
|
|
817
|
-
|
|
818
|
-
validateLatestHash(execResponse, currentSlot) {
|
|
851
|
+
validateLatestHash(execResponse, currentSlot, { strict = true } = {}) {
|
|
819
852
|
// Look reverse because its highly likely node with latestValidExecHash is towards the
|
|
820
853
|
// the leaves of the forkchoice
|
|
821
854
|
//
|
|
@@ -825,63 +858,113 @@ export class ProtoArray {
|
|
|
825
858
|
// For more context on this please checkout the following conversation:
|
|
826
859
|
// https://github.com/ChainSafe/lodestar/pull/4182#discussion_r914770167
|
|
827
860
|
if (execResponse.executionStatus === ExecutionStatus.Valid) {
|
|
828
|
-
const { latestValidExecHash } = execResponse;
|
|
861
|
+
const { latestValidExecHash, blockRoot } = execResponse;
|
|
829
862
|
// We use -1 for denoting not found
|
|
830
863
|
let latestValidHashIndex = -1;
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
864
|
+
if (blockRoot !== undefined) {
|
|
865
|
+
latestValidHashIndex = this.getNodeIndexByRootAndBlockHash(blockRoot, latestValidExecHash) ?? -1;
|
|
866
|
+
}
|
|
867
|
+
else {
|
|
868
|
+
for (let nodeIndex = this.nodes.length - 1; nodeIndex >= 0; nodeIndex--) {
|
|
869
|
+
if (this.nodes[nodeIndex].executionPayloadBlockHash === latestValidExecHash) {
|
|
870
|
+
latestValidHashIndex = nodeIndex;
|
|
871
|
+
// We found the block corresponding to latestValidHashIndex, exit the loop
|
|
872
|
+
break;
|
|
873
|
+
}
|
|
836
874
|
}
|
|
837
875
|
}
|
|
838
876
|
// We are trying to be as forgiving as possible here because ideally latestValidHashIndex
|
|
839
877
|
// should be found in the forkchoice
|
|
840
|
-
if (latestValidHashIndex
|
|
841
|
-
|
|
878
|
+
if (latestValidHashIndex < 0) {
|
|
879
|
+
return false;
|
|
842
880
|
}
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
if (invalidateFromParentIndex === undefined) {
|
|
861
|
-
throw Error(`Unable to find invalidateFromParentBlockRoot=${invalidateFromParentBlockRoot} invalidateFromParentBlockHash=${invalidateFromParentBlockHash} in forkChoice`);
|
|
881
|
+
const { executionStatus } = this.nodes[latestValidHashIndex];
|
|
882
|
+
if (executionStatus === ExecutionStatus.Valid || executionStatus === ExecutionStatus.PreMerge) {
|
|
883
|
+
return false;
|
|
884
|
+
}
|
|
885
|
+
if (!strict) {
|
|
886
|
+
// The walk up flips every Syncing ancestor, a lenient verdict must not contradict an invalidated one
|
|
887
|
+
let nodeIndex = latestValidHashIndex;
|
|
888
|
+
while (nodeIndex !== undefined) {
|
|
889
|
+
const node = this.nodes[nodeIndex];
|
|
890
|
+
if (node.executionStatus === ExecutionStatus.Valid || node.executionStatus === ExecutionStatus.PreMerge) {
|
|
891
|
+
break;
|
|
892
|
+
}
|
|
893
|
+
if (node.executionStatus === ExecutionStatus.Invalid) {
|
|
894
|
+
return false;
|
|
895
|
+
}
|
|
896
|
+
nodeIndex = node.parent;
|
|
897
|
+
}
|
|
862
898
|
}
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
899
|
+
this.propagateValidExecutionStatusByIndex(latestValidHashIndex);
|
|
900
|
+
return true;
|
|
901
|
+
}
|
|
902
|
+
// In case of invalidation, ideally:
|
|
903
|
+
// i) Find the invalid payload
|
|
904
|
+
// ii) Obtain a chain [LVH.child, LVH.child.child, ....., invalid_payload]
|
|
905
|
+
// iii) Obtain a chain [Last_known_valid_node, ...., LVH]
|
|
906
|
+
//
|
|
907
|
+
// Mark chain iii) as Valid if LVH is non null but right now LVH can be non null without
|
|
908
|
+
// gurranteing chain iii) to be valid: for e.g. in following scenario LVH can be returned
|
|
909
|
+
// as any of SYNCING: SYNCING, SYNCING, SYNCING, INVALID (due to simple check)/
|
|
910
|
+
// So we currently ignore this chain and hope eventually it gets resolved
|
|
911
|
+
//
|
|
912
|
+
// Mark chain ii) as Invalid if LVH is found and non null, else only invalidate invalid_payload
|
|
913
|
+
// if its in fcU.
|
|
914
|
+
//
|
|
915
|
+
const { invalidateFromParentBlockRoot, invalidateFromParentBlockHash, latestValidExecHash } = execResponse;
|
|
916
|
+
const invalidateFromParentIndex = this.getNodeIndexByRootAndBlockHash(invalidateFromParentBlockRoot, invalidateFromParentBlockHash);
|
|
917
|
+
if (invalidateFromParentIndex === undefined) {
|
|
918
|
+
throw Error(`Unable to find invalidateFromParentBlockRoot=${invalidateFromParentBlockRoot} invalidateFromParentBlockHash=${invalidateFromParentBlockHash} in forkChoice`);
|
|
919
|
+
}
|
|
920
|
+
if (!strict && this.nodes[invalidateFromParentIndex].executionStatus !== ExecutionStatus.Syncing) {
|
|
921
|
+
return false;
|
|
922
|
+
}
|
|
923
|
+
let latestValidHashIndex = latestValidExecHash !== null ? this.getNodeIndexFromLVH(latestValidExecHash, invalidateFromParentIndex) : null;
|
|
924
|
+
if (latestValidHashIndex === null) {
|
|
925
|
+
if (strict) {
|
|
926
|
+
// The strict from node is the parent of the rejected payload and may be valid, never guess here
|
|
881
927
|
throw Error(`Unable to find latestValidExecHash=${latestValidExecHash} in the forkchoice`);
|
|
882
928
|
}
|
|
883
|
-
this.
|
|
929
|
+
latestValidHashIndex = this.getUnknownLVHIndex(invalidateFromParentIndex);
|
|
930
|
+
}
|
|
931
|
+
if (!strict) {
|
|
932
|
+
// Never invalidate the justified block, the EMPTY variant sharing its chain, or anything at or below it in
|
|
933
|
+
// the tree. The justified block's own payload (FULL variant) is not part of the checkpoint
|
|
934
|
+
const justifiedIndex = this.getDefaultNodeIndex(this.justifiedRoot) ?? -1;
|
|
935
|
+
let nodeIndex = invalidateFromParentIndex;
|
|
936
|
+
while (nodeIndex !== undefined && nodeIndex > latestValidHashIndex) {
|
|
937
|
+
const node = this.nodes[nodeIndex];
|
|
938
|
+
if (node.executionStatus !== ExecutionStatus.Syncing ||
|
|
939
|
+
nodeIndex <= justifiedIndex ||
|
|
940
|
+
(node.blockRoot === this.justifiedRoot && node.payloadStatus === PayloadStatus.EMPTY)) {
|
|
941
|
+
// Conflicting LVH: fall back to the unknown LVH bound, but never cross this node
|
|
942
|
+
latestValidHashIndex = Math.max(nodeIndex, this.getUnknownLVHIndex(invalidateFromParentIndex));
|
|
943
|
+
break;
|
|
944
|
+
}
|
|
945
|
+
nodeIndex = node.parent;
|
|
946
|
+
}
|
|
947
|
+
}
|
|
948
|
+
if (invalidateFromParentIndex <= latestValidHashIndex) {
|
|
949
|
+
return false;
|
|
884
950
|
}
|
|
951
|
+
this.propagateInValidExecutionStatusByIndex(invalidateFromParentIndex, latestValidHashIndex, currentSlot);
|
|
952
|
+
return true;
|
|
953
|
+
}
|
|
954
|
+
/**
|
|
955
|
+
* Upper bound (exclusive) for invalidating from `fromIndex` when the engine gave no usable LVH: the parent of the
|
|
956
|
+
* last ancestor that still inherits the queried payload. Pre-gloas this is the parent of `fromIndex`. For a gloas
|
|
957
|
+
* EMPTY or PENDING node it reaches up to the FULL node that owns the payload. -1 when the chain reaches the root.
|
|
958
|
+
*/
|
|
959
|
+
getUnknownLVHIndex(fromIndex) {
|
|
960
|
+
const payloadBlockHash = this.nodes[fromIndex].executionPayloadBlockHash;
|
|
961
|
+
let nodeIndex = fromIndex;
|
|
962
|
+
let parentIndex = this.nodes[nodeIndex].parent;
|
|
963
|
+
while (parentIndex !== undefined && this.nodes[parentIndex].executionPayloadBlockHash === payloadBlockHash) {
|
|
964
|
+
nodeIndex = parentIndex;
|
|
965
|
+
parentIndex = this.nodes[nodeIndex].parent;
|
|
966
|
+
}
|
|
967
|
+
return parentIndex ?? -1;
|
|
885
968
|
}
|
|
886
969
|
propagateValidExecutionStatusByIndex(validNodeIndex) {
|
|
887
970
|
let nodeIndex = validNodeIndex;
|
|
@@ -1049,6 +1132,13 @@ export class ProtoArray {
|
|
|
1049
1132
|
}
|
|
1050
1133
|
// For Gloas: check if from previous slot
|
|
1051
1134
|
if (node.slot + 1 !== currentSlot) {
|
|
1135
|
+
// During the block's own slot a payload known to not satisfy the inclusion list
|
|
1136
|
+
// constraints ranks below its EMPTY variant, as it will from the next slot on
|
|
1137
|
+
if (node.slot === currentSlot &&
|
|
1138
|
+
node.payloadStatus === PayloadStatus.FULL &&
|
|
1139
|
+
this.payloadInclusionListSatisfaction.get(node.blockRoot) === false) {
|
|
1140
|
+
return PayloadStatus.PENDING;
|
|
1141
|
+
}
|
|
1052
1142
|
return node.payloadStatus;
|
|
1053
1143
|
}
|
|
1054
1144
|
// For previous slot blocks in Gloas, decide between FULL and EMPTY
|
|
@@ -1169,6 +1259,7 @@ export class ProtoArray {
|
|
|
1169
1259
|
this.payloadTimelinessVotes.delete(root);
|
|
1170
1260
|
this.ptcAttested.delete(root);
|
|
1171
1261
|
this.payloadDataAvailabilityVotes.delete(root);
|
|
1262
|
+
this.payloadInclusionListSatisfaction.delete(root);
|
|
1172
1263
|
}
|
|
1173
1264
|
// Store nodes prior to finalization
|
|
1174
1265
|
const removed = this.nodes.slice(0, finalizedIndex);
|