@lodestar/fork-choice 1.41.0-dev.20f622cc52 → 1.41.0-dev.21d4a81d4e
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.js +6 -3
- package/lib/forkChoice/errors.js.map +1 -1
- package/lib/forkChoice/forkChoice.d.ts +12 -11
- package/lib/forkChoice/forkChoice.d.ts.map +1 -1
- package/lib/forkChoice/forkChoice.js +29 -22
- package/lib/forkChoice/forkChoice.js.map +1 -1
- package/lib/forkChoice/interface.d.ts +12 -11
- package/lib/forkChoice/interface.d.ts.map +1 -1
- package/lib/forkChoice/interface.js +6 -3
- package/lib/forkChoice/interface.js.map +1 -1
- package/lib/forkChoice/safeBlocks.js.map +1 -1
- package/lib/forkChoice/store.d.ts +10 -10
- package/lib/forkChoice/store.d.ts.map +1 -1
- package/lib/forkChoice/store.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/metrics.d.ts.map +1 -1
- package/lib/metrics.js.map +1 -1
- package/lib/protoArray/computeDeltas.js.map +1 -1
- package/lib/protoArray/errors.js +4 -2
- package/lib/protoArray/errors.js.map +1 -1
- package/lib/protoArray/interface.js +4 -2
- package/lib/protoArray/interface.js.map +1 -1
- package/lib/protoArray/protoArray.d.ts +17 -11
- package/lib/protoArray/protoArray.d.ts.map +1 -1
- package/lib/protoArray/protoArray.js +49 -56
- package/lib/protoArray/protoArray.js.map +1 -1
- package/package.json +9 -9
- package/src/forkChoice/forkChoice.ts +47 -32
- package/src/forkChoice/interface.ts +19 -10
- package/src/forkChoice/store.ts +11 -11
- package/src/index.ts +1 -1
- package/src/protoArray/protoArray.ts +61 -62
|
@@ -17,7 +17,7 @@ export type CheckpointWithHex = phase0.Checkpoint & {
|
|
|
17
17
|
* Pre-Gloas: payloadStatus is always FULL (payload embedded in block)
|
|
18
18
|
* Gloas: determined by state.execution_payload_availability
|
|
19
19
|
*/
|
|
20
|
-
export type
|
|
20
|
+
export type CheckpointWithPayloadStatus = CheckpointWithHex & {
|
|
21
21
|
payloadStatus: PayloadStatus;
|
|
22
22
|
};
|
|
23
23
|
export type JustifiedBalances = EffectiveBalanceIncrements;
|
|
@@ -27,7 +27,7 @@ export type JustifiedBalances = EffectiveBalanceIncrements;
|
|
|
27
27
|
* `blockState` is maybe used as a fallback state to get balances since it's very close to desired justified state.
|
|
28
28
|
* @param blockState state that declares justified checkpoint `checkpoint`
|
|
29
29
|
*/
|
|
30
|
-
export type JustifiedBalancesGetter = (checkpoint:
|
|
30
|
+
export type JustifiedBalancesGetter = (checkpoint: CheckpointWithPayloadStatus, blockState: CachedBeaconStateAllForks) => JustifiedBalances;
|
|
31
31
|
/**
|
|
32
32
|
* Approximates the `Store` in "Ethereum Consensus -- Beacon Chain Fork Choice":
|
|
33
33
|
*
|
|
@@ -45,8 +45,8 @@ export interface IForkChoiceStore {
|
|
|
45
45
|
get justified(): CheckpointWithPayloadAndTotalBalance;
|
|
46
46
|
set justified(justified: CheckpointWithPayloadAndBalance);
|
|
47
47
|
unrealizedJustified: CheckpointWithPayloadAndBalance;
|
|
48
|
-
finalizedCheckpoint:
|
|
49
|
-
unrealizedFinalizedCheckpoint:
|
|
48
|
+
finalizedCheckpoint: CheckpointWithPayloadStatus;
|
|
49
|
+
unrealizedFinalizedCheckpoint: CheckpointWithPayloadStatus;
|
|
50
50
|
justifiedBalancesGetter: JustifiedBalancesGetter;
|
|
51
51
|
equivocatingIndices: Set<ValidatorIndex>;
|
|
52
52
|
}
|
|
@@ -58,7 +58,7 @@ export declare class ForkChoiceStore implements IForkChoiceStore {
|
|
|
58
58
|
private _justified;
|
|
59
59
|
unrealizedJustified: CheckpointWithPayloadAndBalance;
|
|
60
60
|
private _finalizedCheckpoint;
|
|
61
|
-
unrealizedFinalizedCheckpoint:
|
|
61
|
+
unrealizedFinalizedCheckpoint: CheckpointWithPayloadStatus;
|
|
62
62
|
equivocatingIndices: Set<number>;
|
|
63
63
|
justifiedBalancesGetter: JustifiedBalancesGetter;
|
|
64
64
|
currentSlot: Slot;
|
|
@@ -75,16 +75,16 @@ export declare class ForkChoiceStore implements IForkChoiceStore {
|
|
|
75
75
|
* Gloas: determined by state.execution_payload_availability
|
|
76
76
|
*/
|
|
77
77
|
finalizedPayloadStatus: PayloadStatus, events?: {
|
|
78
|
-
onJustified: (cp:
|
|
79
|
-
onFinalized: (cp:
|
|
78
|
+
onJustified: (cp: CheckpointWithPayloadStatus) => void;
|
|
79
|
+
onFinalized: (cp: CheckpointWithPayloadStatus) => void;
|
|
80
80
|
} | undefined);
|
|
81
81
|
get justified(): CheckpointWithPayloadAndTotalBalance;
|
|
82
82
|
set justified(justified: CheckpointWithPayloadAndBalance);
|
|
83
|
-
get finalizedCheckpoint():
|
|
84
|
-
set finalizedCheckpoint(checkpoint:
|
|
83
|
+
get finalizedCheckpoint(): CheckpointWithPayloadStatus;
|
|
84
|
+
set finalizedCheckpoint(checkpoint: CheckpointWithPayloadStatus);
|
|
85
85
|
}
|
|
86
86
|
export declare function toCheckpointWithHex(checkpoint: phase0.Checkpoint): CheckpointWithHex;
|
|
87
|
-
export declare function toCheckpointWithPayload(checkpoint: phase0.Checkpoint, payloadStatus: PayloadStatus):
|
|
87
|
+
export declare function toCheckpointWithPayload(checkpoint: phase0.Checkpoint, payloadStatus: PayloadStatus): CheckpointWithPayloadStatus;
|
|
88
88
|
export declare function equalCheckpointWithHex(a: CheckpointWithHex, b: CheckpointWithHex): boolean;
|
|
89
89
|
export declare function computeTotalBalance(balances: EffectiveBalanceIncrements): number;
|
|
90
90
|
//# 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,yBAAyB,EAAE,0BAA0B,EAAC,MAAM,4BAA4B,CAAC;AACjG,OAAO,EAAC,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAEtE,OAAO,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAC,+BAA+B,EAAE,oCAAoC,EAAC,MAAM,gBAAgB,CAAC;AAErG;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,UAAU,GAAG;IAAC,OAAO,EAAE,OAAO,CAAA;CAAC,CAAC;AAEvE;;;;;;GAMG;AACH,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/forkChoice/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,yBAAyB,EAAE,0BAA0B,EAAC,MAAM,4BAA4B,CAAC;AACjG,OAAO,EAAC,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAEtE,OAAO,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAC,+BAA+B,EAAE,oCAAoC,EAAC,MAAM,gBAAgB,CAAC;AAErG;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,UAAU,GAAG;IAAC,OAAO,EAAE,OAAO,CAAA;CAAC,CAAC;AAEvE;;;;;;GAMG;AACH,MAAM,MAAM,2BAA2B,GAAG,iBAAiB,GAAG;IAAC,aAAa,EAAE,aAAa,CAAA;CAAC,CAAC;AAE7F,MAAM,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,GAAG,CACpC,UAAU,EAAE,2BAA2B,EACvC,UAAU,EAAE,yBAAyB,KAClC,iBAAiB,CAAC;AAEvB;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,IAAI,CAAC;IAClB,IAAI,SAAS,IAAI,oCAAoC,CAAC;IACtD,IAAI,SAAS,CAAC,SAAS,EAAE,+BAA+B,EAAE;IAC1D,mBAAmB,EAAE,+BAA+B,CAAC;IACrD,mBAAmB,EAAE,2BAA2B,CAAC;IACjD,6BAA6B,EAAE,2BAA2B,CAAC;IAC3D,uBAAuB,EAAE,uBAAuB,CAAC;IACjD,mBAAmB,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CAC1C;AAED;;GAEG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;IA2BpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IA1B1B,OAAO,CAAC,UAAU,CAAuC;IACzD,mBAAmB,EAAE,+BAA+B,CAAC;IACrD,OAAO,CAAC,oBAAoB,CAA8B;IAC1D,6BAA6B,EAAE,2BAA2B,CAAC;IAC3D,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;IAChD;;;;OAIG;IACH,sBAAsB,EAAE,aAAa;IACrC;;;;OAIG;IACH,sBAAsB,EAAE,aAAa,EACpB,MAAM,CAAC;;;iBAGvB,EAaF;IAED,IAAI,SAAS,IAAI,oCAAoC,CAEpD;IACD,IAAI,SAAS,CAAC,SAAS,EAAE,+BAA+B,EAGvD;IAED,IAAI,mBAAmB,IAAI,2BAA2B,CAErD;IACD,IAAI,mBAAmB,CAAC,UAAU,EAAE,2BAA2B,EAI9D;CACF;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,GAAG,iBAAiB,CASpF;AAED,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,CAAC,UAAU,EAC7B,aAAa,EAAE,aAAa,GAC3B,2BAA2B,CAK7B;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAE1F;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,0BAA0B,GAAG,MAAM,CAMhF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/forkChoice/store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAwD1C;;GAEG;AACH,MAAM,OAAO,eAAe;IA2BP;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/forkChoice/store.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export { ForkChoiceError, ForkChoiceErrorCode, type InvalidAttestation, InvalidA
|
|
|
2
2
|
export { ForkChoice, type ForkChoiceOpts, UpdateHeadOpt, getCheckpointPayloadStatus, } from "./forkChoice/forkChoice.js";
|
|
3
3
|
export { type AncestorResult, AncestorStatus, type CheckpointWithPayloadAndBalance, type CheckpointWithPayloadAndTotalBalance, EpochDifference, type IForkChoice, NotReorgedReason, } from "./forkChoice/interface.js";
|
|
4
4
|
export * from "./forkChoice/safeBlocks.js";
|
|
5
|
-
export { type CheckpointWithHex, type
|
|
5
|
+
export { type CheckpointWithHex, type CheckpointWithPayloadStatus, ForkChoiceStore, type IForkChoiceStore, type JustifiedBalancesGetter, } from "./forkChoice/store.js";
|
|
6
6
|
export { type ForkChoiceMetrics, getForkChoiceMetrics } from "./metrics.js";
|
|
7
7
|
export type { BlockExtraMeta, LVHInvalidResponse, LVHValidResponse, MaybeValidExecutionStatus, ProtoBlock, ProtoNode, } from "./protoArray/interface.js";
|
|
8
8
|
export { ExecutionStatus, PayloadStatus } 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,EACL,UAAU,EACV,KAAK,cAAc,EACnB,aAAa,EACb,0BAA0B,GAC3B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,KAAK,cAAc,EACnB,cAAc,EACd,KAAK,+BAA+B,EACpC,KAAK,oCAAoC,EACzC,eAAe,EACf,KAAK,WAAW,EAChB,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,
|
|
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,UAAU,EACV,KAAK,cAAc,EACnB,aAAa,EACb,0BAA0B,GAC3B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,KAAK,cAAc,EACnB,cAAc,EACd,KAAK,+BAA+B,EACpC,KAAK,oCAAoC,EACzC,eAAe,EACf,KAAK,WAAW,EAChB,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,2BAA2B,EAChC,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,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,yBAAyB,EACzB,UAAU,EACV,SAAS,GACV,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAC,eAAe,EAAE,aAAa,EAAC,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAC,UAAU,EAAC,MAAM,4BAA4B,CAAC"}
|
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;AAExE,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,oBAAoB
|
|
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;AAExE,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmGlE"}
|
package/lib/metrics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,oBAAoB,CAAC,QAA8B;
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computeDeltas.js","sourceRoot":"","sources":["../../src/protoArray/computeDeltas.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,eAAe,EAAE,mBAAmB,EAAC,MAAM,aAAa,CAAC;AACjE,OAAO,EAAC,eAAe,EAAY,MAAM,gBAAgB,CAAC;AAE1D,mDAAmD;AACnD,MAAM,MAAM,GAAG,IAAI,KAAK,EAAU,CAAC;AAcnC;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAC3B,aAAqB,EACrB,kBAA+B,EAC/B,eAA4B,EAC5B,WAAuC,EACvC,WAAuC,EACvC,mBAAwC;
|
|
1
|
+
{"version":3,"file":"computeDeltas.js","sourceRoot":"","sources":["../../src/protoArray/computeDeltas.ts"],"names":[],"mappings":"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"}
|
package/lib/protoArray/errors.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { LodestarError } from "@lodestar/utils";
|
|
2
|
-
export
|
|
2
|
+
export { LVHExecErrorCode };
|
|
3
|
+
var LVHExecErrorCode;
|
|
3
4
|
(function (LVHExecErrorCode) {
|
|
4
5
|
LVHExecErrorCode["PreMergeToInvalid"] = "PreMergeToInvalid";
|
|
5
6
|
LVHExecErrorCode["ValidToInvalid"] = "ValidToInvalid";
|
|
6
7
|
LVHExecErrorCode["InvalidToValid"] = "InvalidToValid";
|
|
7
8
|
})(LVHExecErrorCode || (LVHExecErrorCode = {}));
|
|
8
|
-
export
|
|
9
|
+
export { ProtoArrayErrorCode };
|
|
10
|
+
var ProtoArrayErrorCode;
|
|
9
11
|
(function (ProtoArrayErrorCode) {
|
|
10
12
|
ProtoArrayErrorCode["FINALIZED_NODE_UNKNOWN"] = "PROTO_ARRAY_ERROR_FINALIZED_NODE_UNKNOWN";
|
|
11
13
|
ProtoArrayErrorCode["JUSTIFIED_NODE_UNKNOWN"] = "PROTO_ARRAY_ERROR_JUSTIFIED_NODE_UNKNOWN";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/protoArray/errors.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/protoArray/errors.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;SAElC,gBAAgB;AAA5B,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,2DAAuC,CAAA;IACvC,qDAAiC,CAAA;IACjC,qDAAiC,CAAA;AAAC,CACpC,EAJY,gBAAgB,KAAhB,gBAAgB,QAI3B;SAIW,mBAAmB;AAA/B,IAAY,mBAqBX;AArBD,WAAY,mBAAmB;IAC7B,0FAAmE,CAAA;IACnE,0FAAmE,CAAA;IACnE,wEAAiD,CAAA;IACjD,sFAA+D,CAAA;IAC/D,wGAAiF,CAAA;IACjF,kFAA2D,CAAA;IAC3D,sFAA+D,CAAA;IAC/D,8FAAuE,CAAA;IACvE,4FAAqE,CAAA;IACrE,wGAAiF,CAAA;IACjF,sFAA+D,CAAA;IAC/D,kFAA2D,CAAA;IAC3D,0EAAmD,CAAA;IACnD,gFAAyD,CAAA;IACzD,8FAAuE,CAAA;IACvE,gFAAyD,CAAA;IACzD,oGAA6E,CAAA;IAC7E,4GAAqF,CAAA;IACrF,oGAA6E,CAAA;IAC7E,4EAAqD,CAAA;AAAC,CACxD,EArBY,mBAAmB,KAAnB,mBAAmB,QAqB9B;AAgCD,MAAM,OAAO,eAAgB,SAAQ,aAAkC;CAAG"}
|
|
@@ -7,6 +7,7 @@ export const HEX_ZERO_HASH = "0x000000000000000000000000000000000000000000000000
|
|
|
7
7
|
* The number of proto nodes will never exceed this value because it represents (0xffffffff / 365 / 24 / 60 / 5), ie > 1634 years of non-finalized network.
|
|
8
8
|
*/
|
|
9
9
|
export const NULL_VOTE_INDEX = 0xffffffff;
|
|
10
|
+
export { ExecutionStatus };
|
|
10
11
|
/**
|
|
11
12
|
* Execution status of a block in fork choice.
|
|
12
13
|
*
|
|
@@ -18,7 +19,7 @@ export const NULL_VOTE_INDEX = 0xffffffff;
|
|
|
18
19
|
* The execution payload arrives separately via SignedExecutionPayloadEnvelope.
|
|
19
20
|
* Gloas blocks WITH execution payload (FULL variant) use Valid/Invalid/Syncing.
|
|
20
21
|
*/
|
|
21
|
-
|
|
22
|
+
var ExecutionStatus;
|
|
22
23
|
(function (ExecutionStatus) {
|
|
23
24
|
ExecutionStatus["Valid"] = "Valid";
|
|
24
25
|
ExecutionStatus["Syncing"] = "Syncing";
|
|
@@ -26,11 +27,12 @@ export var ExecutionStatus;
|
|
|
26
27
|
ExecutionStatus["Invalid"] = "Invalid";
|
|
27
28
|
ExecutionStatus["PayloadSeparated"] = "PayloadSeparated";
|
|
28
29
|
})(ExecutionStatus || (ExecutionStatus = {}));
|
|
30
|
+
export { PayloadStatus };
|
|
29
31
|
/**
|
|
30
32
|
* Payload status for ePBS (Gloas fork)
|
|
31
33
|
* Spec: gloas/fork-choice.md#constants
|
|
32
34
|
*/
|
|
33
|
-
|
|
35
|
+
var PayloadStatus;
|
|
34
36
|
(function (PayloadStatus) {
|
|
35
37
|
PayloadStatus[PayloadStatus["PENDING"] = 0] = "PENDING";
|
|
36
38
|
PayloadStatus[PayloadStatus["EMPTY"] = 1] = "EMPTY";
|
|
@@ -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;
|
|
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;SAkB9B,eAAe;AAX3B;;;;;;;;;;GAUG;AACH,IAAY,eAMX;AAND,WAAY,eAAe;IACzB,kCAAe,CAAA;IACf,sCAAmB,CAAA;IACnB,wCAAqB,CAAA;IACrB,sCAAmB,CAAA;IACnB,wDAAqC,CAAA;AAAC,CACxC,EANY,eAAe,KAAf,eAAe,QAM1B;SAMW,aAAa;AAJzB;;;GAGG;AACH,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,uDAAW,CAAA;IACX,mDAAS,CAAA;IACT,iDAAQ,CAAA;AAAC,CACX,EAJY,aAAa,KAAb,aAAa,QAIxB;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAiB,EAAW;IACvD,OAAO,KAAK,CAAC,eAAe,KAAK,IAAI,CAAC;AAAA,CACvC"}
|
|
@@ -36,15 +36,15 @@ export declare class ProtoArray {
|
|
|
36
36
|
lvhError?: LVHExecError;
|
|
37
37
|
private previousProposerBoost;
|
|
38
38
|
/**
|
|
39
|
-
* PTC (Payload Timeliness Committee) votes per block
|
|
40
|
-
* Maps block root to
|
|
39
|
+
* PTC (Payload Timeliness Committee) votes per block as bitvectors
|
|
40
|
+
* Maps block root to BitArray of PTC_SIZE bits (512 mainnet, 2 minimal)
|
|
41
41
|
* Spec: gloas/fork-choice.md#modified-store (line 148)
|
|
42
42
|
*
|
|
43
|
-
*
|
|
43
|
+
* Bit i is set if PTC member i voted payload_present=true
|
|
44
44
|
* Used by is_payload_timely() to determine if payload is timely
|
|
45
45
|
*/
|
|
46
46
|
private ptcVotes;
|
|
47
|
-
constructor({ pruneThreshold, justifiedEpoch, justifiedRoot, finalizedEpoch, finalizedRoot
|
|
47
|
+
constructor({ pruneThreshold, justifiedEpoch, justifiedRoot, finalizedEpoch, finalizedRoot }: {
|
|
48
48
|
pruneThreshold: number;
|
|
49
49
|
justifiedEpoch: Epoch;
|
|
50
50
|
justifiedRoot: RootHex;
|
|
@@ -75,6 +75,12 @@ export declare class ProtoArray {
|
|
|
75
75
|
* @returns PayloadStatus.FULL for pre-Gloas, PayloadStatus.PENDING for Gloas, undefined if block not found
|
|
76
76
|
*/
|
|
77
77
|
getDefaultVariant(blockRoot: RootHex): PayloadStatus | undefined;
|
|
78
|
+
/**
|
|
79
|
+
* Get the node index for the default/canonical variant in a single hash lookup.
|
|
80
|
+
* - Pre-Gloas blocks: returns the FULL variant index
|
|
81
|
+
* - Gloas blocks: returns the PENDING variant index
|
|
82
|
+
*/
|
|
83
|
+
getDefaultNodeIndex(blockRoot: RootHex): number | undefined;
|
|
78
84
|
/**
|
|
79
85
|
* Determine which parent payload status a block extends
|
|
80
86
|
* Spec: gloas/fork-choice.md#new-get_parent_payload_status
|
|
@@ -115,7 +121,7 @@ export declare class ProtoArray {
|
|
|
115
121
|
* should become the best child.
|
|
116
122
|
* - If required, update the parents best-descendant with the current node or its best-descendant.
|
|
117
123
|
*/
|
|
118
|
-
applyScoreChanges({ deltas, proposerBoost, justifiedEpoch, justifiedRoot, finalizedEpoch, finalizedRoot, currentSlot
|
|
124
|
+
applyScoreChanges({ deltas, proposerBoost, justifiedEpoch, justifiedRoot, finalizedEpoch, finalizedRoot, currentSlot }: {
|
|
119
125
|
deltas: number[];
|
|
120
126
|
proposerBoost: ProposerBoost | null;
|
|
121
127
|
justifiedEpoch: Epoch;
|
|
@@ -301,7 +307,7 @@ export declare class ProtoArray {
|
|
|
301
307
|
* For Gloas blocks: returns EMPTY/FULL variants (not PENDING) based on parent payload status
|
|
302
308
|
* For pre-Gloas blocks: returns FULL variants
|
|
303
309
|
*/
|
|
304
|
-
iterateAncestorNodes(blockRoot: RootHex): IterableIterator<ProtoNode>;
|
|
310
|
+
iterateAncestorNodes(blockRoot: RootHex, payloadStatus: PayloadStatus): IterableIterator<ProtoNode>;
|
|
305
311
|
/**
|
|
306
312
|
* Iterate from a node backwards over ancestor nodes
|
|
307
313
|
* For Gloas blocks: returns EMPTY/FULL variants (not PENDING) based on parent payload status
|
|
@@ -314,7 +320,7 @@ export declare class ProtoArray {
|
|
|
314
320
|
* For Gloas blocks: returns EMPTY/FULL variants (not PENDING) based on parent payload status
|
|
315
321
|
* For pre-Gloas blocks: returns FULL variants
|
|
316
322
|
*/
|
|
317
|
-
getAllAncestorNodes(blockRoot: RootHex): ProtoNode[];
|
|
323
|
+
getAllAncestorNodes(blockRoot: RootHex, payloadStatus: PayloadStatus): ProtoNode[];
|
|
318
324
|
/**
|
|
319
325
|
* The opposite of iterateNodes.
|
|
320
326
|
* iterateNodes is to find ancestor nodes of a blockRoot.
|
|
@@ -323,13 +329,13 @@ export declare class ProtoArray {
|
|
|
323
329
|
* For Gloas blocks: returns EMPTY/FULL variants (not PENDING) based on parent payload status
|
|
324
330
|
* For pre-Gloas blocks: returns FULL variants
|
|
325
331
|
*/
|
|
326
|
-
getAllNonAncestorNodes(blockRoot: RootHex): ProtoNode[];
|
|
332
|
+
getAllNonAncestorNodes(blockRoot: RootHex, payloadStatus: PayloadStatus): ProtoNode[];
|
|
327
333
|
/**
|
|
328
334
|
* Returns both ancestor and non-ancestor nodes in a single traversal.
|
|
329
335
|
* For Gloas blocks: returns EMPTY/FULL variants (not PENDING) based on parent payload status
|
|
330
336
|
* For pre-Gloas blocks: returns FULL variants
|
|
331
337
|
*/
|
|
332
|
-
getAllAncestorAndNonAncestorNodes(blockRoot: RootHex): {
|
|
338
|
+
getAllAncestorAndNonAncestorNodes(blockRoot: RootHex, payloadStatus: PayloadStatus): {
|
|
333
339
|
ancestors: ProtoNode[];
|
|
334
340
|
nonAncestors: ProtoNode[];
|
|
335
341
|
};
|
|
@@ -375,9 +381,9 @@ export declare class ProtoArray {
|
|
|
375
381
|
/**
|
|
376
382
|
* Returns `true` if the `descendantRoot` has an ancestor with `ancestorRoot`.
|
|
377
383
|
* Always returns `false` if either input roots are unknown.
|
|
378
|
-
* Still returns `true` if `ancestorRoot` === `descendantRoot`
|
|
384
|
+
* Still returns `true` if `ancestorRoot` === `descendantRoot` and payload statuses match.
|
|
379
385
|
*/
|
|
380
|
-
isDescendant(ancestorRoot: RootHex, descendantRoot: RootHex): boolean;
|
|
386
|
+
isDescendant(ancestorRoot: RootHex, ancestorPayloadStatus: PayloadStatus, descendantRoot: RootHex, descendantPayloadStatus: PayloadStatus): boolean;
|
|
381
387
|
/**
|
|
382
388
|
* Returns a common ancestor for nodeA or nodeB or null if there's none
|
|
383
389
|
*/
|
|
@@ -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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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { BitArray } from "@chainsafe/ssz";
|
|
1
2
|
import { GENESIS_EPOCH, PTC_SIZE } from "@lodestar/params";
|
|
2
3
|
import { computeEpochAtSlot, computeStartSlotAtEpoch } from "@lodestar/state-transition";
|
|
3
|
-
import { toRootHex } from "@lodestar/utils";
|
|
4
|
+
import { bitCount, toRootHex } from "@lodestar/utils";
|
|
4
5
|
import { ForkChoiceError, ForkChoiceErrorCode } from "../forkChoice/errors.js";
|
|
5
6
|
import { LVHExecErrorCode, ProtoArrayError, ProtoArrayErrorCode } from "./errors.js";
|
|
6
7
|
import { ExecutionStatus, HEX_ZERO_HASH, PayloadStatus, isGloasBlock, } from "./interface.js";
|
|
@@ -34,11 +35,11 @@ export class ProtoArray {
|
|
|
34
35
|
lvhError;
|
|
35
36
|
previousProposerBoost = null;
|
|
36
37
|
/**
|
|
37
|
-
* PTC (Payload Timeliness Committee) votes per block
|
|
38
|
-
* Maps block root to
|
|
38
|
+
* PTC (Payload Timeliness Committee) votes per block as bitvectors
|
|
39
|
+
* Maps block root to BitArray of PTC_SIZE bits (512 mainnet, 2 minimal)
|
|
39
40
|
* Spec: gloas/fork-choice.md#modified-store (line 148)
|
|
40
41
|
*
|
|
41
|
-
*
|
|
42
|
+
* Bit i is set if PTC member i voted payload_present=true
|
|
42
43
|
* Used by is_payload_timely() to determine if payload is timely
|
|
43
44
|
*/
|
|
44
45
|
ptcVotes = new Map();
|
|
@@ -117,6 +118,23 @@ export class ProtoArray {
|
|
|
117
118
|
// Gloas: multiple variants exist, PENDING is canonical
|
|
118
119
|
return PayloadStatus.PENDING;
|
|
119
120
|
}
|
|
121
|
+
/**
|
|
122
|
+
* Get the node index for the default/canonical variant in a single hash lookup.
|
|
123
|
+
* - Pre-Gloas blocks: returns the FULL variant index
|
|
124
|
+
* - Gloas blocks: returns the PENDING variant index
|
|
125
|
+
*/
|
|
126
|
+
getDefaultNodeIndex(blockRoot) {
|
|
127
|
+
const variantOrArr = this.indices.get(blockRoot);
|
|
128
|
+
if (variantOrArr == null) {
|
|
129
|
+
return undefined;
|
|
130
|
+
}
|
|
131
|
+
// Pre-Gloas: value is the index directly
|
|
132
|
+
if (!Array.isArray(variantOrArr)) {
|
|
133
|
+
return variantOrArr;
|
|
134
|
+
}
|
|
135
|
+
// Gloas: PENDING is the canonical variant
|
|
136
|
+
return variantOrArr[PayloadStatus.PENDING];
|
|
137
|
+
}
|
|
120
138
|
/**
|
|
121
139
|
* Determine which parent payload status a block extends
|
|
122
140
|
* Spec: gloas/fork-choice.md#new-get_parent_payload_status
|
|
@@ -279,6 +297,7 @@ export class ProtoArray {
|
|
|
279
297
|
// We _must_ perform these functions separate from the weight-updating loop above to ensure
|
|
280
298
|
// that we have a fully coherent set of weights before updating parent
|
|
281
299
|
// best-child/descendant.
|
|
300
|
+
const proposerBoostRoot = proposerBoost?.root ?? null;
|
|
282
301
|
for (let nodeIndex = this.nodes.length - 1; nodeIndex >= 0; nodeIndex--) {
|
|
283
302
|
const node = this.nodes[nodeIndex];
|
|
284
303
|
if (node === undefined) {
|
|
@@ -290,7 +309,7 @@ export class ProtoArray {
|
|
|
290
309
|
// If the node has a parent, try to update its best-child and best-descendant.
|
|
291
310
|
const parentIndex = node.parent;
|
|
292
311
|
if (parentIndex !== undefined) {
|
|
293
|
-
this.maybeUpdateBestChildAndDescendant(parentIndex, nodeIndex, currentSlot,
|
|
312
|
+
this.maybeUpdateBestChildAndDescendant(parentIndex, nodeIndex, currentSlot, proposerBoostRoot);
|
|
294
313
|
}
|
|
295
314
|
}
|
|
296
315
|
// Update the previous proposer boost
|
|
@@ -371,7 +390,7 @@ export class ProtoArray {
|
|
|
371
390
|
this.maybeUpdateBestChildAndDescendant(pendingIndex, emptyIndex, currentSlot, proposerBoostRoot);
|
|
372
391
|
// Initialize PTC votes for this block (all false initially)
|
|
373
392
|
// Spec: gloas/fork-choice.md#modified-on_block (line 645)
|
|
374
|
-
this.ptcVotes.set(block.blockRoot,
|
|
393
|
+
this.ptcVotes.set(block.blockRoot, BitArray.fromBitLen(PTC_SIZE));
|
|
375
394
|
}
|
|
376
395
|
else {
|
|
377
396
|
// Pre-Gloas: Only create FULL node (payload embedded in block)
|
|
@@ -478,8 +497,7 @@ export class ProtoArray {
|
|
|
478
497
|
if (ptcIndex < 0 || ptcIndex >= PTC_SIZE) {
|
|
479
498
|
throw new Error(`Invalid PTC index: ${ptcIndex}, must be 0..${PTC_SIZE - 1}`);
|
|
480
499
|
}
|
|
481
|
-
|
|
482
|
-
votes[ptcIndex] = payloadPresent;
|
|
500
|
+
votes.set(ptcIndex, payloadPresent);
|
|
483
501
|
}
|
|
484
502
|
}
|
|
485
503
|
/**
|
|
@@ -506,7 +524,7 @@ export class ProtoArray {
|
|
|
506
524
|
return false;
|
|
507
525
|
}
|
|
508
526
|
// Count votes for payload_present=true
|
|
509
|
-
const yesVotes = votes.
|
|
527
|
+
const yesVotes = bitCount(votes.uint8Array);
|
|
510
528
|
return yesVotes > PAYLOAD_TIMELY_THRESHOLD;
|
|
511
529
|
}
|
|
512
530
|
/**
|
|
@@ -542,8 +560,8 @@ export class ProtoArray {
|
|
|
542
560
|
}
|
|
543
561
|
// Get proposer boost block
|
|
544
562
|
// We don't care about variant here, just need proposer boost block info
|
|
545
|
-
const
|
|
546
|
-
const proposerBoostBlock =
|
|
563
|
+
const proposerBoostIndex = this.getDefaultNodeIndex(proposerBoostRoot);
|
|
564
|
+
const proposerBoostBlock = proposerBoostIndex !== undefined ? this.getNodeByIndex(proposerBoostIndex) : undefined;
|
|
547
565
|
if (!proposerBoostBlock) {
|
|
548
566
|
// Proposer boost block not found, default to extending payload
|
|
549
567
|
return true;
|
|
@@ -605,11 +623,8 @@ export class ProtoArray {
|
|
|
605
623
|
// if its in fcU.
|
|
606
624
|
//
|
|
607
625
|
const { invalidateFromParentBlockRoot, latestValidExecHash } = execResponse;
|
|
608
|
-
// TODO GLOAS: verify if getting default
|
|
609
|
-
const
|
|
610
|
-
const invalidateFromParentIndex = defaultStatus !== undefined
|
|
611
|
-
? this.getNodeIndexByRootAndStatus(invalidateFromParentBlockRoot, defaultStatus)
|
|
612
|
-
: undefined;
|
|
626
|
+
// TODO GLOAS: verify if getting the default/canonical node index is correct here
|
|
627
|
+
const invalidateFromParentIndex = this.getDefaultNodeIndex(invalidateFromParentBlockRoot);
|
|
613
628
|
if (invalidateFromParentIndex === undefined) {
|
|
614
629
|
throw Error(`Unable to find invalidateFromParentBlockRoot=${invalidateFromParentBlockRoot} in forkChoice`);
|
|
615
630
|
}
|
|
@@ -793,8 +808,7 @@ export class ProtoArray {
|
|
|
793
808
|
});
|
|
794
809
|
}
|
|
795
810
|
// Get canonical node: FULL for pre-Gloas, PENDING for Gloas
|
|
796
|
-
const
|
|
797
|
-
const justifiedIndex = defaultStatus !== undefined ? this.getNodeIndexByRootAndStatus(justifiedRoot, defaultStatus) : undefined;
|
|
811
|
+
const justifiedIndex = this.getDefaultNodeIndex(justifiedRoot);
|
|
798
812
|
if (justifiedIndex === undefined) {
|
|
799
813
|
throw new ProtoArrayError({
|
|
800
814
|
code: ProtoArrayErrorCode.JUSTIFIED_NODE_UNKNOWN,
|
|
@@ -1246,10 +1260,8 @@ export class ProtoArray {
|
|
|
1246
1260
|
* For Gloas blocks: returns EMPTY/FULL variants (not PENDING) based on parent payload status
|
|
1247
1261
|
* For pre-Gloas blocks: returns FULL variants
|
|
1248
1262
|
*/
|
|
1249
|
-
*iterateAncestorNodes(blockRoot) {
|
|
1250
|
-
|
|
1251
|
-
const defaultStatus = this.getDefaultVariant(blockRoot);
|
|
1252
|
-
const startIndex = defaultStatus !== undefined ? this.getNodeIndexByRootAndStatus(blockRoot, defaultStatus) : undefined;
|
|
1263
|
+
*iterateAncestorNodes(blockRoot, payloadStatus) {
|
|
1264
|
+
const startIndex = this.getNodeIndexByRootAndStatus(blockRoot, payloadStatus);
|
|
1253
1265
|
if (startIndex === undefined) {
|
|
1254
1266
|
return;
|
|
1255
1267
|
}
|
|
@@ -1283,10 +1295,8 @@ export class ProtoArray {
|
|
|
1283
1295
|
* For Gloas blocks: returns EMPTY/FULL variants (not PENDING) based on parent payload status
|
|
1284
1296
|
* For pre-Gloas blocks: returns FULL variants
|
|
1285
1297
|
*/
|
|
1286
|
-
getAllAncestorNodes(blockRoot) {
|
|
1287
|
-
|
|
1288
|
-
const defaultStatus = this.getDefaultVariant(blockRoot);
|
|
1289
|
-
const startIndex = defaultStatus !== undefined ? this.getNodeIndexByRootAndStatus(blockRoot, defaultStatus) : undefined;
|
|
1298
|
+
getAllAncestorNodes(blockRoot, payloadStatus) {
|
|
1299
|
+
const startIndex = this.getNodeIndexByRootAndStatus(blockRoot, payloadStatus);
|
|
1290
1300
|
if (startIndex === undefined) {
|
|
1291
1301
|
return [];
|
|
1292
1302
|
}
|
|
@@ -1297,11 +1307,9 @@ export class ProtoArray {
|
|
|
1297
1307
|
index: startIndex,
|
|
1298
1308
|
});
|
|
1299
1309
|
}
|
|
1300
|
-
//
|
|
1301
|
-
// Reason why we exclude post-gloas is because node is always default variant (PENDING)
|
|
1302
|
-
// which we want to exclude.
|
|
1310
|
+
// Exclude PENDING variant from returned ancestors.
|
|
1303
1311
|
const nodes = [];
|
|
1304
|
-
if (
|
|
1312
|
+
if (node.payloadStatus !== PayloadStatus.PENDING) {
|
|
1305
1313
|
nodes.push(node);
|
|
1306
1314
|
}
|
|
1307
1315
|
while (node.parent !== undefined) {
|
|
@@ -1322,13 +1330,8 @@ export class ProtoArray {
|
|
|
1322
1330
|
* For Gloas blocks: returns EMPTY/FULL variants (not PENDING) based on parent payload status
|
|
1323
1331
|
* For pre-Gloas blocks: returns FULL variants
|
|
1324
1332
|
*/
|
|
1325
|
-
getAllNonAncestorNodes(blockRoot) {
|
|
1326
|
-
|
|
1327
|
-
const defaultStatus = this.getDefaultVariant(blockRoot);
|
|
1328
|
-
if (defaultStatus === undefined) {
|
|
1329
|
-
return [];
|
|
1330
|
-
}
|
|
1331
|
-
const startIndex = this.getNodeIndexByRootAndStatus(blockRoot, defaultStatus);
|
|
1333
|
+
getAllNonAncestorNodes(blockRoot, payloadStatus) {
|
|
1334
|
+
const startIndex = this.getNodeIndexByRootAndStatus(blockRoot, payloadStatus);
|
|
1332
1335
|
if (startIndex === undefined) {
|
|
1333
1336
|
return [];
|
|
1334
1337
|
}
|
|
@@ -1362,10 +1365,8 @@ export class ProtoArray {
|
|
|
1362
1365
|
* For Gloas blocks: returns EMPTY/FULL variants (not PENDING) based on parent payload status
|
|
1363
1366
|
* For pre-Gloas blocks: returns FULL variants
|
|
1364
1367
|
*/
|
|
1365
|
-
getAllAncestorAndNonAncestorNodes(blockRoot) {
|
|
1366
|
-
|
|
1367
|
-
const defaultStatus = this.getDefaultVariant(blockRoot);
|
|
1368
|
-
const startIndex = defaultStatus !== undefined ? this.getNodeIndexByRootAndStatus(blockRoot, defaultStatus) : undefined;
|
|
1368
|
+
getAllAncestorAndNonAncestorNodes(blockRoot, payloadStatus) {
|
|
1369
|
+
const startIndex = this.getNodeIndexByRootAndStatus(blockRoot, payloadStatus);
|
|
1369
1370
|
if (startIndex === undefined) {
|
|
1370
1371
|
return { ancestors: [], nonAncestors: [] };
|
|
1371
1372
|
}
|
|
@@ -1404,12 +1405,7 @@ export class ProtoArray {
|
|
|
1404
1405
|
* Uses default variant (PENDING for Gloas, FULL for pre-Gloas)
|
|
1405
1406
|
*/
|
|
1406
1407
|
hasBlock(blockRoot) {
|
|
1407
|
-
|
|
1408
|
-
if (defaultVariant === undefined) {
|
|
1409
|
-
return false;
|
|
1410
|
-
}
|
|
1411
|
-
const index = this.getNodeIndexByRootAndStatus(blockRoot, defaultVariant);
|
|
1412
|
-
return index !== undefined;
|
|
1408
|
+
return this.getDefaultNodeIndex(blockRoot) !== undefined;
|
|
1413
1409
|
}
|
|
1414
1410
|
/**
|
|
1415
1411
|
* Return ProtoNode for blockRoot with explicit payload status
|
|
@@ -1468,24 +1464,21 @@ export class ProtoArray {
|
|
|
1468
1464
|
/**
|
|
1469
1465
|
* Returns `true` if the `descendantRoot` has an ancestor with `ancestorRoot`.
|
|
1470
1466
|
* Always returns `false` if either input roots are unknown.
|
|
1471
|
-
* Still returns `true` if `ancestorRoot` === `descendantRoot`
|
|
1467
|
+
* Still returns `true` if `ancestorRoot` === `descendantRoot` and payload statuses match.
|
|
1472
1468
|
*/
|
|
1473
|
-
isDescendant(ancestorRoot, descendantRoot) {
|
|
1474
|
-
|
|
1475
|
-
// We cannot use FULL/EMPTY variants for Gloas because they may not be canonical
|
|
1476
|
-
const defaultStatus = this.getDefaultVariant(ancestorRoot);
|
|
1477
|
-
const ancestorNode = defaultStatus !== undefined ? this.getNode(ancestorRoot, defaultStatus) : undefined;
|
|
1469
|
+
isDescendant(ancestorRoot, ancestorPayloadStatus, descendantRoot, descendantPayloadStatus) {
|
|
1470
|
+
const ancestorNode = this.getNode(ancestorRoot, ancestorPayloadStatus);
|
|
1478
1471
|
if (!ancestorNode) {
|
|
1479
1472
|
return false;
|
|
1480
1473
|
}
|
|
1481
|
-
if (ancestorRoot === descendantRoot) {
|
|
1474
|
+
if (ancestorRoot === descendantRoot && ancestorPayloadStatus === descendantPayloadStatus) {
|
|
1482
1475
|
return true;
|
|
1483
1476
|
}
|
|
1484
|
-
for (const node of this.iterateAncestorNodes(descendantRoot)) {
|
|
1477
|
+
for (const node of this.iterateAncestorNodes(descendantRoot, descendantPayloadStatus)) {
|
|
1485
1478
|
if (node.slot < ancestorNode.slot) {
|
|
1486
1479
|
return false;
|
|
1487
1480
|
}
|
|
1488
|
-
if (node.blockRoot === ancestorNode.blockRoot) {
|
|
1481
|
+
if (node.blockRoot === ancestorNode.blockRoot && node.payloadStatus === ancestorNode.payloadStatus) {
|
|
1489
1482
|
return true;
|
|
1490
1483
|
}
|
|
1491
1484
|
}
|