@lodestar/fork-choice 1.41.0-dev.bb33751bfd → 1.41.0-dev.be5acbb8f7
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 +9 -1
- package/lib/forkChoice/errors.d.ts.map +1 -1
- package/lib/forkChoice/errors.js +4 -0
- package/lib/forkChoice/errors.js.map +1 -1
- package/lib/forkChoice/forkChoice.d.ts +73 -17
- package/lib/forkChoice/forkChoice.d.ts.map +1 -1
- package/lib/forkChoice/forkChoice.js +299 -116
- package/lib/forkChoice/forkChoice.js.map +1 -1
- package/lib/forkChoice/interface.d.ts +53 -20
- package/lib/forkChoice/interface.d.ts.map +1 -1
- package/lib/forkChoice/interface.js.map +1 -1
- package/lib/forkChoice/store.d.ts +40 -16
- package/lib/forkChoice/store.d.ts.map +1 -1
- package/lib/forkChoice/store.js +22 -4
- package/lib/forkChoice/store.js.map +1 -1
- package/lib/index.d.ts +4 -4
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/protoArray/computeDeltas.d.ts.map +1 -1
- package/lib/protoArray/computeDeltas.js +3 -0
- package/lib/protoArray/computeDeltas.js.map +1 -1
- package/lib/protoArray/errors.d.ts +15 -2
- package/lib/protoArray/errors.d.ts.map +1 -1
- package/lib/protoArray/errors.js +3 -0
- package/lib/protoArray/errors.js.map +1 -1
- package/lib/protoArray/interface.d.ts +20 -2
- package/lib/protoArray/interface.d.ts.map +1 -1
- package/lib/protoArray/interface.js +16 -0
- package/lib/protoArray/interface.js.map +1 -1
- package/lib/protoArray/protoArray.d.ts +217 -22
- package/lib/protoArray/protoArray.d.ts.map +1 -1
- package/lib/protoArray/protoArray.js +748 -133
- package/lib/protoArray/protoArray.js.map +1 -1
- package/package.json +7 -7
- package/src/forkChoice/errors.ts +7 -2
- package/src/forkChoice/forkChoice.ts +384 -126
- package/src/forkChoice/interface.ts +72 -20
- package/src/forkChoice/store.ts +52 -20
- package/src/index.ts +10 -2
- package/src/protoArray/computeDeltas.ts +6 -0
- package/src/protoArray/errors.ts +7 -1
- package/src/protoArray/interface.ts +36 -3
- package/src/protoArray/protoArray.ts +880 -134
|
@@ -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;IAExC,IAAI,kBAAkB,CAAC,MAAM,KAAK,eAAe,CAAC,MAAM,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CACb,qEAAqE,kBAAkB,CAAC,MAAM,QAAQ,eAAe,CAAC,MAAM,EAAE,CAC/H,CAAC;IACJ,CAAC;IAED,IAAI,aAAa,IAAI,eAAe,EAAE,CAAC;QACrC,yDAAyD;QACzD,MAAM,IAAI,KAAK,CAAC,oDAAoD,aAAa,OAAO,eAAe,EAAE,CAAC,CAAC;IAC7G,CAAC;IAED,MAAM,CAAC,MAAM,GAAG,aAAa,CAAC;IAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEf,6EAA6E;IAC7E,IAAI,UAAkB,EAAE,UAAkB,CAAC;IAC3C,IAAI,YAAuB,EAAE,SAAoB,CAAC;IAClD,2DAA2D;IAC3D,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAChF,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,IAAI,0BAA0B,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IAEtE,MAAM,sBAAsB,GAAG,mBAAmB,CAAC,IAAI,CAAC;IACxD,IAAI,qBAAqB,GAAG,CAAC,CAAC;IAC9B,IAAI,qBAAqB,GAAG,CAAC,CAAC;IAC9B,IAAI,uBAAuB,GAAG,CAAC,CAAC;IAChC,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAE1B,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;QAC/D,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC1C,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"computeDeltas.js","sourceRoot":"","sources":["../../src/protoArray/computeDeltas.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,8 @@ export type LVHExecError = {
|
|
|
13
13
|
export declare enum ProtoArrayErrorCode {
|
|
14
14
|
FINALIZED_NODE_UNKNOWN = "PROTO_ARRAY_ERROR_FINALIZED_NODE_UNKNOWN",
|
|
15
15
|
JUSTIFIED_NODE_UNKNOWN = "PROTO_ARRAY_ERROR_JUSTIFIED_NODE_UNKNOWN",
|
|
16
|
+
UNKNOWN_BLOCK = "PROTO_ARRAY_ERROR_UNKNOWN_BLOCK",
|
|
17
|
+
UNKNOWN_PARENT_BLOCK = "PROTO_ARRAY_ERROR_UNKNOWN_PARENT_BLOCK",
|
|
16
18
|
INVALID_FINALIZED_ROOT_CHANGE = "PROTO_ARRAY_ERROR_INVALID_FINALIZED_ROOT_CHANGE",
|
|
17
19
|
INVALID_NODE_INDEX = "PROTO_ARRAY_ERROR_INVALID_NODE_INDEX",
|
|
18
20
|
INVALID_PARENT_INDEX = "PROTO_ARRAY_ERROR_INVALID_PARENT_INDEX",
|
|
@@ -27,7 +29,8 @@ export declare enum ProtoArrayErrorCode {
|
|
|
27
29
|
INVALID_BEST_NODE = "PROTO_ARRAY_ERROR_INVALID_BEST_NODE",
|
|
28
30
|
INVALID_BLOCK_EXECUTION_STATUS = "PROTO_ARRAY_INVALID_BLOCK_EXECUTION_STATUS",
|
|
29
31
|
INVALID_JUSTIFIED_EXECUTION_STATUS = "PROTO_ARRAY_INVALID_JUSTIFIED_EXECUTION_STATUS",
|
|
30
|
-
INVALID_LVH_EXECUTION_RESPONSE = "PROTO_ARRAY_INVALID_LVH_EXECUTION_RESPONSE"
|
|
32
|
+
INVALID_LVH_EXECUTION_RESPONSE = "PROTO_ARRAY_INVALID_LVH_EXECUTION_RESPONSE",
|
|
33
|
+
PRE_GLOAS_BLOCK = "PROTO_ARRAY_ERROR_PRE_GLOAS_BLOCK"
|
|
31
34
|
}
|
|
32
35
|
export type ProtoArrayErrorType = {
|
|
33
36
|
code: ProtoArrayErrorCode.FINALIZED_NODE_UNKNOWN;
|
|
@@ -35,6 +38,13 @@ export type ProtoArrayErrorType = {
|
|
|
35
38
|
} | {
|
|
36
39
|
code: ProtoArrayErrorCode.JUSTIFIED_NODE_UNKNOWN;
|
|
37
40
|
root: RootHex;
|
|
41
|
+
} | {
|
|
42
|
+
code: ProtoArrayErrorCode.UNKNOWN_BLOCK;
|
|
43
|
+
root: RootHex;
|
|
44
|
+
} | {
|
|
45
|
+
code: ProtoArrayErrorCode.UNKNOWN_PARENT_BLOCK;
|
|
46
|
+
parentRoot: RootHex;
|
|
47
|
+
parentHash: RootHex | null;
|
|
38
48
|
} | {
|
|
39
49
|
code: ProtoArrayErrorCode.INVALID_FINALIZED_ROOT_CHANGE;
|
|
40
50
|
} | {
|
|
@@ -85,7 +95,10 @@ export type ProtoArrayErrorType = {
|
|
|
85
95
|
root: RootHex;
|
|
86
96
|
} | ({
|
|
87
97
|
code: ProtoArrayErrorCode.INVALID_LVH_EXECUTION_RESPONSE;
|
|
88
|
-
} & LVHExecError)
|
|
98
|
+
} & LVHExecError) | {
|
|
99
|
+
code: ProtoArrayErrorCode.PRE_GLOAS_BLOCK;
|
|
100
|
+
root: RootHex;
|
|
101
|
+
};
|
|
89
102
|
export declare class ProtoArrayError extends LodestarError<ProtoArrayErrorType> {
|
|
90
103
|
}
|
|
91
104
|
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/protoArray/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,OAAO,EAAC,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAE9C,oBAAY,gBAAgB;IAC1B,iBAAiB,sBAAsB;IACvC,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;CAClC;AAED,MAAM,MAAM,YAAY,GAAG;IAAC,OAAO,EAAE,gBAAgB,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAC,CAAC;AAE9F,oBAAY,mBAAmB;IAC7B,sBAAsB,6CAA6C;IACnE,sBAAsB,6CAA6C;IACnE,6BAA6B,oDAAoD;IACjF,kBAAkB,yCAAyC;IAC3D,oBAAoB,2CAA2C;IAC/D,wBAAwB,+CAA+C;IACvE,uBAAuB,8CAA8C;IACrE,6BAA6B,oDAAoD;IACjF,oBAAoB,2CAA2C;IAC/D,kBAAkB,yCAAyC;IAC3D,cAAc,qCAAqC;IACnD,iBAAiB,wCAAwC;IACzD,wBAAwB,+CAA+C;IACvE,iBAAiB,wCAAwC;IACzD,8BAA8B,+CAA+C;IAC7E,kCAAkC,mDAAmD;IACrF,8BAA8B,+CAA+C;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/protoArray/errors.ts"],"names":[],"mappings":"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"}
|
package/lib/protoArray/errors.js
CHANGED
|
@@ -9,6 +9,8 @@ export var ProtoArrayErrorCode;
|
|
|
9
9
|
(function (ProtoArrayErrorCode) {
|
|
10
10
|
ProtoArrayErrorCode["FINALIZED_NODE_UNKNOWN"] = "PROTO_ARRAY_ERROR_FINALIZED_NODE_UNKNOWN";
|
|
11
11
|
ProtoArrayErrorCode["JUSTIFIED_NODE_UNKNOWN"] = "PROTO_ARRAY_ERROR_JUSTIFIED_NODE_UNKNOWN";
|
|
12
|
+
ProtoArrayErrorCode["UNKNOWN_BLOCK"] = "PROTO_ARRAY_ERROR_UNKNOWN_BLOCK";
|
|
13
|
+
ProtoArrayErrorCode["UNKNOWN_PARENT_BLOCK"] = "PROTO_ARRAY_ERROR_UNKNOWN_PARENT_BLOCK";
|
|
12
14
|
ProtoArrayErrorCode["INVALID_FINALIZED_ROOT_CHANGE"] = "PROTO_ARRAY_ERROR_INVALID_FINALIZED_ROOT_CHANGE";
|
|
13
15
|
ProtoArrayErrorCode["INVALID_NODE_INDEX"] = "PROTO_ARRAY_ERROR_INVALID_NODE_INDEX";
|
|
14
16
|
ProtoArrayErrorCode["INVALID_PARENT_INDEX"] = "PROTO_ARRAY_ERROR_INVALID_PARENT_INDEX";
|
|
@@ -24,6 +26,7 @@ export var ProtoArrayErrorCode;
|
|
|
24
26
|
ProtoArrayErrorCode["INVALID_BLOCK_EXECUTION_STATUS"] = "PROTO_ARRAY_INVALID_BLOCK_EXECUTION_STATUS";
|
|
25
27
|
ProtoArrayErrorCode["INVALID_JUSTIFIED_EXECUTION_STATUS"] = "PROTO_ARRAY_INVALID_JUSTIFIED_EXECUTION_STATUS";
|
|
26
28
|
ProtoArrayErrorCode["INVALID_LVH_EXECUTION_RESPONSE"] = "PROTO_ARRAY_INVALID_LVH_EXECUTION_RESPONSE";
|
|
29
|
+
ProtoArrayErrorCode["PRE_GLOAS_BLOCK"] = "PROTO_ARRAY_ERROR_PRE_GLOAS_BLOCK";
|
|
27
30
|
})(ProtoArrayErrorCode || (ProtoArrayErrorCode = {}));
|
|
28
31
|
export class ProtoArrayError extends LodestarError {
|
|
29
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/protoArray/errors.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAE9C,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,2DAAuC,CAAA;IACvC,qDAAiC,CAAA;IACjC,qDAAiC,CAAA;AACnC,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B;AAID,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/protoArray/errors.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAE9C,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,2DAAuC,CAAA;IACvC,qDAAiC,CAAA;IACjC,qDAAiC,CAAA;AACnC,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B;AAID,MAAM,CAAN,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;AACvD,CAAC,EArBW,mBAAmB,KAAnB,mBAAmB,QAqB9B;AAgCD,MAAM,OAAO,eAAgB,SAAQ,aAAkC;CAAG"}
|
|
@@ -29,6 +29,19 @@ export declare enum ExecutionStatus {
|
|
|
29
29
|
Invalid = "Invalid",
|
|
30
30
|
PayloadSeparated = "PayloadSeparated"
|
|
31
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Payload status for ePBS (Gloas fork)
|
|
34
|
+
* Spec: gloas/fork-choice.md#constants
|
|
35
|
+
*/
|
|
36
|
+
export declare enum PayloadStatus {
|
|
37
|
+
PENDING = 0,
|
|
38
|
+
EMPTY = 1,
|
|
39
|
+
FULL = 2
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Check if a block is in the Gloas fork (ePBS enabled)
|
|
43
|
+
*/
|
|
44
|
+
export declare function isGloasBlock(block: ProtoBlock): boolean;
|
|
32
45
|
export type LVHValidResponse = {
|
|
33
46
|
executionStatus: ExecutionStatus.Valid;
|
|
34
47
|
latestValidExecHash: RootHex;
|
|
@@ -85,12 +98,17 @@ export type ProtoBlock = BlockExtraMeta & {
|
|
|
85
98
|
unrealizedFinalizedEpoch: Epoch;
|
|
86
99
|
unrealizedFinalizedRoot: RootHex;
|
|
87
100
|
timeliness: boolean;
|
|
88
|
-
|
|
89
|
-
|
|
101
|
+
/** Payload status for this node (Gloas fork). Always FULL in pre-gloas */
|
|
102
|
+
payloadStatus: PayloadStatus;
|
|
103
|
+
builderIndex: number | null;
|
|
104
|
+
blockHashFromBid: RootHex | null;
|
|
105
|
+
parentBlockHash: RootHex | null;
|
|
90
106
|
};
|
|
91
107
|
/**
|
|
92
108
|
* A block root with additional metadata required to form a DAG
|
|
93
109
|
* with vote weights and best blocks stored as metadata
|
|
110
|
+
*
|
|
111
|
+
* It is also used as ForkChoiceNode in fork choice spec
|
|
94
112
|
*/
|
|
95
113
|
export type ProtoNode = ProtoBlock & {
|
|
96
114
|
parent?: number;
|
|
@@ -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,EAAC,MAAM,iBAAiB,CAAC;AAIhE,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;IACnB,gBAAgB,qBAAqB;CACtC;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,eAAe,EAAE,eAAe,CAAC,KAAK,CAAC;IACvC,mBAAmB,EAAE,OAAO,CAAC;CAC9B,CAAC;AACF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,eAAe,EAAE,eAAe,CAAC,OAAO,CAAC;IACzC,mBAAmB,EAAE,OAAO,GAAG,IAAI,CAAC;IACpC,6BAA6B,EAAE,OAAO,CAAC;CACxC,CAAC;AACF,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG,kBAAkB,CAAC;AAEpE,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAAC,eAAe,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;AAE1F,MAAM,MAAM,cAAc,GACtB;
|
|
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,EAAC,MAAM,iBAAiB,CAAC;AAIhE,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;IACnB,gBAAgB,qBAAqB;CACtC;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,OAAO,CAEvD;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,eAAe,EAAE,eAAe,CAAC,KAAK,CAAC;IACvC,mBAAmB,EAAE,OAAO,CAAC;CAC9B,CAAC;AACF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,eAAe,EAAE,eAAe,CAAC,OAAO,CAAC;IACzC,mBAAmB,EAAE,OAAO,GAAG,IAAI,CAAC;IACpC,6BAA6B,EAAE,OAAO,CAAC;CACxC,CAAC;AACF,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG,kBAAkB,CAAC;AAEpE,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAAC,eAAe,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;AAE1F,MAAM,MAAM,cAAc,GACtB;IAME,yBAAyB,EAAE,OAAO,CAAC;IACnC,sBAAsB,EAAE,SAAS,CAAC;IAClC,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IACpE,sBAAsB,EAAE,sBAAsB,CAAC;CAChD,GACD;IACE,yBAAyB,EAAE,IAAI,CAAC;IAChC,eAAe,EAAE,eAAe,CAAC,QAAQ,CAAC;IAC1C,sBAAsB,EAAE,sBAAsB,CAAC,OAAO,CAAC;CACxD,CAAC;AAEN;;;;GAIG;AAEH,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG;IACxC;;;;OAIG;IACH,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,UAAU,EAAE,OAAO,CAAC;IAEpB,cAAc,EAAE,KAAK,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,KAAK,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,wBAAwB,EAAE,KAAK,CAAC;IAChC,uBAAuB,EAAE,OAAO,CAAC;IACjC,wBAAwB,EAAE,KAAK,CAAC;IAChC,uBAAuB,EAAE,OAAO,CAAC;IAGjC,UAAU,EAAE,OAAO,CAAC;IAEpB,0EAA0E;IAC1E,aAAa,EAAE,aAAa,CAAC;IAI7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5B,gBAAgB,EAAE,OAAO,GAAG,IAAI,CAAC;IAIjC,eAAe,EAAE,OAAO,GAAG,IAAI,CAAC;CACjC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC"}
|
|
@@ -26,4 +26,20 @@ export var ExecutionStatus;
|
|
|
26
26
|
ExecutionStatus["Invalid"] = "Invalid";
|
|
27
27
|
ExecutionStatus["PayloadSeparated"] = "PayloadSeparated";
|
|
28
28
|
})(ExecutionStatus || (ExecutionStatus = {}));
|
|
29
|
+
/**
|
|
30
|
+
* Payload status for ePBS (Gloas fork)
|
|
31
|
+
* Spec: gloas/fork-choice.md#constants
|
|
32
|
+
*/
|
|
33
|
+
export var PayloadStatus;
|
|
34
|
+
(function (PayloadStatus) {
|
|
35
|
+
PayloadStatus[PayloadStatus["PENDING"] = 0] = "PENDING";
|
|
36
|
+
PayloadStatus[PayloadStatus["EMPTY"] = 1] = "EMPTY";
|
|
37
|
+
PayloadStatus[PayloadStatus["FULL"] = 2] = "FULL";
|
|
38
|
+
})(PayloadStatus || (PayloadStatus = {}));
|
|
39
|
+
/**
|
|
40
|
+
* Check if a block is in the Gloas fork (ePBS enabled)
|
|
41
|
+
*/
|
|
42
|
+
export function isGloasBlock(block) {
|
|
43
|
+
return block.parentBlockHash !== null;
|
|
44
|
+
}
|
|
29
45
|
//# sourceMappingURL=interface.js.map
|
|
@@ -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,eAMX;AAND,WAAY,eAAe;IACzB,kCAAe,CAAA;IACf,sCAAmB,CAAA;IACnB,wCAAqB,CAAA;IACrB,sCAAmB,CAAA;IACnB,wDAAqC,CAAA;AACvC,CAAC,EANW,eAAe,KAAf,eAAe,QAM1B"}
|
|
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,eAMX;AAND,WAAY,eAAe;IACzB,kCAAe,CAAA;IACf,sCAAmB,CAAA;IACnB,wCAAqB,CAAA;IACrB,sCAAmB,CAAA;IACnB,wDAAqC,CAAA;AACvC,CAAC,EANW,eAAe,KAAf,eAAe,QAM1B;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,11 +1,20 @@
|
|
|
1
1
|
import { Epoch, RootHex, Slot } from "@lodestar/types";
|
|
2
2
|
import { LVHExecError } from "./errors.js";
|
|
3
|
-
import { LVHExecResponse, ProtoBlock, ProtoNode } from "./interface.js";
|
|
3
|
+
import { LVHExecResponse, PayloadStatus, ProtoBlock, ProtoNode } from "./interface.js";
|
|
4
4
|
export declare const DEFAULT_PRUNE_THRESHOLD = 0;
|
|
5
5
|
type ProposerBoost = {
|
|
6
6
|
root: RootHex;
|
|
7
7
|
score: number;
|
|
8
8
|
};
|
|
9
|
+
/** Pre-Gloas: single element, FULL index (for backward compatibility) */
|
|
10
|
+
type PreGloasVariantIndex = number;
|
|
11
|
+
/**
|
|
12
|
+
* Post-Gloas: array length is 2 or 3
|
|
13
|
+
* - Length 2: [PENDING_INDEX, EMPTY_INDEX] when payload hasn't arrived yet
|
|
14
|
+
* - Length 3: [PENDING_INDEX, EMPTY_INDEX, FULL_INDEX] when payload has arrived
|
|
15
|
+
*/
|
|
16
|
+
type GloasVariantIndices = [number, number] | [number, number, number];
|
|
17
|
+
type VariantIndices = PreGloasVariantIndex | GloasVariantIndices;
|
|
9
18
|
export declare class ProtoArray {
|
|
10
19
|
pruneThreshold: number;
|
|
11
20
|
justifiedEpoch: Epoch;
|
|
@@ -13,9 +22,28 @@ export declare class ProtoArray {
|
|
|
13
22
|
finalizedEpoch: Epoch;
|
|
14
23
|
finalizedRoot: RootHex;
|
|
15
24
|
nodes: ProtoNode[];
|
|
16
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Maps block root to array of node indices for each payload status variant
|
|
27
|
+
*
|
|
28
|
+
* Array structure: [PENDING, EMPTY, FULL] where indices correspond to PayloadStatus enum values
|
|
29
|
+
* - number[0] = PENDING variant index (PayloadStatus.PENDING = 0)
|
|
30
|
+
* - number[1] = EMPTY variant index (PayloadStatus.EMPTY = 1)
|
|
31
|
+
* - number[2] = FULL variant index (PayloadStatus.FULL = 2)
|
|
32
|
+
*
|
|
33
|
+
* Note: undefined array elements indicate that variant doesn't exist for this block
|
|
34
|
+
*/
|
|
35
|
+
indices: Map<string, VariantIndices>;
|
|
17
36
|
lvhError?: LVHExecError;
|
|
18
37
|
private previousProposerBoost;
|
|
38
|
+
/**
|
|
39
|
+
* PTC (Payload Timeliness Committee) votes per block
|
|
40
|
+
* Maps block root to boolean array of size PTC_SIZE (from params: 512 mainnet, 2 minimal)
|
|
41
|
+
* Spec: gloas/fork-choice.md#modified-store (line 148)
|
|
42
|
+
*
|
|
43
|
+
* ptcVotes[blockRoot][i] = true if PTC member i voted payload_present=true
|
|
44
|
+
* Used by is_payload_timely() to determine if payload is timely
|
|
45
|
+
*/
|
|
46
|
+
private ptcVotes;
|
|
19
47
|
constructor({ pruneThreshold, justifiedEpoch, justifiedRoot, finalizedEpoch, finalizedRoot, }: {
|
|
20
48
|
pruneThreshold: number;
|
|
21
49
|
justifiedEpoch: Epoch;
|
|
@@ -24,6 +52,54 @@ export declare class ProtoArray {
|
|
|
24
52
|
finalizedRoot: RootHex;
|
|
25
53
|
});
|
|
26
54
|
static initialize(block: Omit<ProtoBlock, "targetRoot">, currentSlot: Slot): ProtoArray;
|
|
55
|
+
/**
|
|
56
|
+
* Get node index for a block root and payload status
|
|
57
|
+
*
|
|
58
|
+
* @param root - The block root to look up
|
|
59
|
+
* @param payloadStatus - The specific payload status variant (PENDING/EMPTY/FULL)
|
|
60
|
+
* @returns The node index for the specified variant, or undefined if not found
|
|
61
|
+
*
|
|
62
|
+
* Behavior:
|
|
63
|
+
* - Pre-Gloas blocks: only FULL is valid, PENDING/EMPTY throw error
|
|
64
|
+
* - Gloas blocks: returns the specified variant index, or undefined if that variant doesn't exist
|
|
65
|
+
*
|
|
66
|
+
* Note: payloadStatus is required. Use getDefaultVariant() to get the canonical variant.
|
|
67
|
+
*/
|
|
68
|
+
getNodeIndexByRootAndStatus(root: RootHex, payloadStatus: PayloadStatus): number | undefined;
|
|
69
|
+
/**
|
|
70
|
+
* Get the default/canonical payload status for a block root
|
|
71
|
+
* - Pre-Gloas blocks: Returns FULL (payload embedded in block)
|
|
72
|
+
* - Gloas blocks: Returns PENDING (canonical variant)
|
|
73
|
+
*
|
|
74
|
+
* @param blockRoot - The block root to check
|
|
75
|
+
* @returns PayloadStatus.FULL for pre-Gloas, PayloadStatus.PENDING for Gloas, undefined if block not found
|
|
76
|
+
*/
|
|
77
|
+
getDefaultVariant(blockRoot: RootHex): PayloadStatus | undefined;
|
|
78
|
+
/**
|
|
79
|
+
* Determine which parent payload status a block extends
|
|
80
|
+
* Spec: gloas/fork-choice.md#new-get_parent_payload_status
|
|
81
|
+
* def get_parent_payload_status(store: Store, block: BeaconBlock) -> PayloadStatus:
|
|
82
|
+
* parent = store.blocks[block.parent_root]
|
|
83
|
+
* parent_block_hash = block.body.signed_execution_payload_bid.message.parent_block_hash
|
|
84
|
+
* message_block_hash = parent.body.signed_execution_payload_bid.message.block_hash
|
|
85
|
+
* return PAYLOAD_STATUS_FULL if parent_block_hash == message_block_hash else PAYLOAD_STATUS_EMPTY
|
|
86
|
+
*
|
|
87
|
+
* In lodestar forkchoice, we don't store the full bid, so we compares parent_block_hash in child's bid with executionPayloadBlockHash in parent:
|
|
88
|
+
* - If it matches EMPTY variant, return EMPTY
|
|
89
|
+
* - If it matches FULL variant, return FULL
|
|
90
|
+
* - If no match, throw UNKNOWN_PARENT_BLOCK error
|
|
91
|
+
*
|
|
92
|
+
* For pre-Gloas blocks: always returns FULL
|
|
93
|
+
*/
|
|
94
|
+
getParentPayloadStatus(block: ProtoBlock): PayloadStatus;
|
|
95
|
+
/**
|
|
96
|
+
* Return the parent `ProtoBlock` given its root and block hash.
|
|
97
|
+
*/
|
|
98
|
+
getParent(parentRoot: RootHex, parentBlockHash: RootHex | null): ProtoBlock | null;
|
|
99
|
+
/**
|
|
100
|
+
* Returns an EMPTY or FULL `ProtoBlock` that has matching block root and block hash
|
|
101
|
+
*/
|
|
102
|
+
getBlockHexAndBlockHash(blockRoot: RootHex, blockHash: RootHex): ProtoBlock | null;
|
|
27
103
|
/**
|
|
28
104
|
* Iterate backwards through the array, touching all nodes and their parents and potentially
|
|
29
105
|
* the best-child of each parent.
|
|
@@ -53,7 +129,57 @@ export declare class ProtoArray {
|
|
|
53
129
|
*
|
|
54
130
|
* It is only sane to supply an undefined parent for the genesis block
|
|
55
131
|
*/
|
|
56
|
-
onBlock(block: ProtoBlock, currentSlot: Slot): void;
|
|
132
|
+
onBlock(block: ProtoBlock, currentSlot: Slot, proposerBoostRoot: RootHex | null): void;
|
|
133
|
+
/**
|
|
134
|
+
* Called when an execution payload is received for a block (Gloas only)
|
|
135
|
+
* Creates a FULL variant node as a sibling to the existing EMPTY variant
|
|
136
|
+
* Both EMPTY and FULL have parent = own PENDING node
|
|
137
|
+
*
|
|
138
|
+
* Spec: gloas/fork-choice.md (on_execution_payload event)
|
|
139
|
+
*/
|
|
140
|
+
onExecutionPayload(blockRoot: RootHex, currentSlot: Slot, executionPayloadBlockHash: RootHex, executionPayloadNumber: number, executionPayloadStateRoot: RootHex, proposerBoostRoot: RootHex | null): void;
|
|
141
|
+
/**
|
|
142
|
+
* Update PTC votes for multiple validators attesting to a block
|
|
143
|
+
* Spec: gloas/fork-choice.md#new-on_payload_attestation_message
|
|
144
|
+
*
|
|
145
|
+
* @param blockRoot - The beacon block root being attested
|
|
146
|
+
* @param ptcIndices - Array of PTC committee indices that voted (0..PTC_SIZE-1)
|
|
147
|
+
* @param payloadPresent - Whether the validators attest the payload is present
|
|
148
|
+
*/
|
|
149
|
+
notifyPtcMessages(blockRoot: RootHex, ptcIndices: number[], payloadPresent: boolean): void;
|
|
150
|
+
/**
|
|
151
|
+
* Check if execution payload for a block is timely
|
|
152
|
+
* Spec: gloas/fork-choice.md#new-is_payload_timely
|
|
153
|
+
*
|
|
154
|
+
* Returns true if:
|
|
155
|
+
* 1. Block has PTC votes tracked
|
|
156
|
+
* 2. Payload is locally available (FULL variant exists in proto array)
|
|
157
|
+
* 3. More than PAYLOAD_TIMELY_THRESHOLD (>50% of PTC) members voted payload_present=true
|
|
158
|
+
*
|
|
159
|
+
* @param blockRoot - The beacon block root to check
|
|
160
|
+
*/
|
|
161
|
+
isPayloadTimely(blockRoot: RootHex): boolean;
|
|
162
|
+
/**
|
|
163
|
+
* Check if parent node is FULL
|
|
164
|
+
* Spec: gloas/fork-choice.md#new-is_parent_node_full
|
|
165
|
+
*
|
|
166
|
+
* Returns true if the parent payload status (determined by block.parentBlockHash) is FULL
|
|
167
|
+
*/
|
|
168
|
+
isParentNodeFull(block: ProtoBlock): boolean;
|
|
169
|
+
/**
|
|
170
|
+
* Determine if we should extend the payload (prefer FULL over EMPTY)
|
|
171
|
+
* Spec: gloas/fork-choice.md#new-should_extend_payload
|
|
172
|
+
*
|
|
173
|
+
* Returns true if:
|
|
174
|
+
* 1. Payload is timely, OR
|
|
175
|
+
* 2. No proposer boost root (empty/zero hash), OR
|
|
176
|
+
* 3. Proposer boost root's parent is not this block, OR
|
|
177
|
+
* 4. Proposer boost root extends FULL parent
|
|
178
|
+
*
|
|
179
|
+
* @param blockRoot - The block root to check
|
|
180
|
+
* @param proposerBoostRoot - Current proposer boost root (from ForkChoice)
|
|
181
|
+
*/
|
|
182
|
+
shouldExtendPayload(blockRoot: RootHex, proposerBoostRoot: RootHex | null): boolean;
|
|
57
183
|
/**
|
|
58
184
|
* Optimistic sync validate till validated latest hash, invalidate any descendant branch
|
|
59
185
|
* if invalidate till hash provided. If consensus fails, this will invalidate entire
|
|
@@ -74,10 +200,25 @@ export declare class ProtoArray {
|
|
|
74
200
|
private getNodeIndexFromLVH;
|
|
75
201
|
private invalidateNodeByIndex;
|
|
76
202
|
private validateNodeByIndex;
|
|
203
|
+
/**
|
|
204
|
+
* Get payload status tiebreaker for fork choice comparison
|
|
205
|
+
* Spec: gloas/fork-choice.md#new-get_payload_status_tiebreaker
|
|
206
|
+
*
|
|
207
|
+
* For PENDING nodes: always returns 0
|
|
208
|
+
* For EMPTY/FULL variants from slot n-1: implements tiebreaker logic based on should_extend_payload
|
|
209
|
+
* For older blocks: returns node.payloadStatus
|
|
210
|
+
*
|
|
211
|
+
* Note: pre-gloas logic won't reach here. Pre-Gloas blocks have different roots, so they are always resolved by the weight and root tiebreaker before reaching here.
|
|
212
|
+
*/
|
|
213
|
+
private getPayloadStatusTiebreaker;
|
|
77
214
|
/**
|
|
78
215
|
* Follows the best-descendant links to find the best-block (i.e., head-block).
|
|
216
|
+
*
|
|
217
|
+
* Returns the ProtoNode representing the head.
|
|
218
|
+
* For pre-Gloas forks, only FULL variants exist (payload embedded).
|
|
219
|
+
* For Gloas, may return PENDING/EMPTY/FULL variants.
|
|
79
220
|
*/
|
|
80
|
-
findHead(justifiedRoot: RootHex, currentSlot: Slot):
|
|
221
|
+
findHead(justifiedRoot: RootHex, currentSlot: Slot): ProtoNode;
|
|
81
222
|
/**
|
|
82
223
|
* Update the tree with new finalization information. The tree is only actually pruned if both
|
|
83
224
|
* of the two following criteria are met:
|
|
@@ -108,7 +249,7 @@ export declare class ProtoArray {
|
|
|
108
249
|
* - The child is not the best child but becomes the best child.
|
|
109
250
|
* - The child is not the best child and does not become the best child.
|
|
110
251
|
*/
|
|
111
|
-
maybeUpdateBestChildAndDescendant(parentIndex: number, childIndex: number, currentSlot: Slot): void;
|
|
252
|
+
maybeUpdateBestChildAndDescendant(parentIndex: number, childIndex: number, currentSlot: Slot, proposerBoostRoot: RootHex | null): void;
|
|
112
253
|
/**
|
|
113
254
|
* Indicates if the node itself is viable for the head, or if it's best descendant is viable
|
|
114
255
|
* for the head.
|
|
@@ -132,57 +273,111 @@ export declare class ProtoArray {
|
|
|
132
273
|
/**
|
|
133
274
|
* Same to getAncestor but it may return null instead of throwing error
|
|
134
275
|
*/
|
|
135
|
-
getAncestorOrNull(blockRoot: RootHex, ancestorSlot: Slot):
|
|
276
|
+
getAncestorOrNull(blockRoot: RootHex, ancestorSlot: Slot): ProtoNode | null;
|
|
136
277
|
/**
|
|
137
|
-
* Returns the
|
|
278
|
+
* Returns the node identifier of an ancestor of `blockRoot` at the given `slot`.
|
|
138
279
|
* (Note: `slot` refers to the block that is *returned*, not the one that is supplied.)
|
|
139
280
|
*
|
|
140
281
|
* NOTE: May be expensive: potentially walks through the entire fork of head to finalized block
|
|
141
282
|
*
|
|
142
283
|
* ### Specification
|
|
143
284
|
*
|
|
144
|
-
*
|
|
285
|
+
* Modified for Gloas to return node identifier instead of just root:
|
|
286
|
+
* https://github.com/ethereum/consensus-specs/blob/v1.7.0-alpha.1/specs/gloas/fork-choice.md#modified-get_ancestor
|
|
145
287
|
*
|
|
146
|
-
*
|
|
288
|
+
* Pre-Gloas: Returns (root, PAYLOAD_STATUS_FULL)
|
|
289
|
+
* Gloas: Returns (root, payloadStatus) based on actual node state
|
|
147
290
|
*/
|
|
148
|
-
getAncestor(blockRoot: RootHex, ancestorSlot: Slot):
|
|
291
|
+
getAncestor(blockRoot: RootHex, ancestorSlot: Slot): ProtoNode;
|
|
149
292
|
/**
|
|
150
|
-
*
|
|
293
|
+
* Get the parent node index for traversal
|
|
294
|
+
* For Gloas blocks: returns the correct EMPTY/FULL variant based on parent payload status
|
|
295
|
+
* For pre-Gloas blocks: returns the simple parent index
|
|
296
|
+
* Returns undefined if parent doesn't exist or can't be found
|
|
151
297
|
*/
|
|
152
|
-
|
|
298
|
+
private getParentNodeIndex;
|
|
153
299
|
/**
|
|
154
300
|
* Iterate from a block root backwards over nodes
|
|
301
|
+
* For Gloas blocks: returns EMPTY/FULL variants (not PENDING) based on parent payload status
|
|
302
|
+
* For pre-Gloas blocks: returns FULL variants
|
|
303
|
+
*/
|
|
304
|
+
iterateAncestorNodes(blockRoot: RootHex, payloadStatus: PayloadStatus): IterableIterator<ProtoNode>;
|
|
305
|
+
/**
|
|
306
|
+
* Iterate from a node backwards over ancestor nodes
|
|
307
|
+
* For Gloas blocks: returns EMPTY/FULL variants (not PENDING) based on parent payload status
|
|
308
|
+
* For pre-Gloas blocks: returns FULL variants
|
|
309
|
+
* Handles fork transition from Gloas to pre-Gloas blocks
|
|
155
310
|
*/
|
|
156
311
|
iterateAncestorNodesFromNode(node: ProtoNode): IterableIterator<ProtoNode>;
|
|
157
312
|
/**
|
|
158
313
|
* Get all nodes from a block root backwards
|
|
314
|
+
* For Gloas blocks: returns EMPTY/FULL variants (not PENDING) based on parent payload status
|
|
315
|
+
* For pre-Gloas blocks: returns FULL variants
|
|
159
316
|
*/
|
|
160
|
-
getAllAncestorNodes(blockRoot: RootHex): ProtoNode[];
|
|
317
|
+
getAllAncestorNodes(blockRoot: RootHex, payloadStatus: PayloadStatus): ProtoNode[];
|
|
161
318
|
/**
|
|
162
319
|
* The opposite of iterateNodes.
|
|
163
320
|
* iterateNodes is to find ancestor nodes of a blockRoot.
|
|
164
321
|
* this is to find non-ancestor nodes of a blockRoot.
|
|
322
|
+
*
|
|
323
|
+
* For Gloas blocks: returns EMPTY/FULL variants (not PENDING) based on parent payload status
|
|
324
|
+
* For pre-Gloas blocks: returns FULL variants
|
|
165
325
|
*/
|
|
166
|
-
getAllNonAncestorNodes(blockRoot: RootHex): ProtoNode[];
|
|
326
|
+
getAllNonAncestorNodes(blockRoot: RootHex, payloadStatus: PayloadStatus): ProtoNode[];
|
|
167
327
|
/**
|
|
168
328
|
* Returns both ancestor and non-ancestor nodes in a single traversal.
|
|
329
|
+
* For Gloas blocks: returns EMPTY/FULL variants (not PENDING) based on parent payload status
|
|
330
|
+
* For pre-Gloas blocks: returns FULL variants
|
|
169
331
|
*/
|
|
170
|
-
getAllAncestorAndNonAncestorNodes(blockRoot: RootHex): {
|
|
332
|
+
getAllAncestorAndNonAncestorNodes(blockRoot: RootHex, payloadStatus: PayloadStatus): {
|
|
171
333
|
ancestors: ProtoNode[];
|
|
172
334
|
nonAncestors: ProtoNode[];
|
|
173
335
|
};
|
|
336
|
+
/**
|
|
337
|
+
* Check if a block exists in the proto array
|
|
338
|
+
* Uses default variant (PENDING for Gloas, FULL for pre-Gloas)
|
|
339
|
+
*/
|
|
174
340
|
hasBlock(blockRoot: RootHex): boolean;
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
341
|
+
/**
|
|
342
|
+
* Return ProtoNode for blockRoot with explicit payload status
|
|
343
|
+
*
|
|
344
|
+
* @param blockRoot - The block root to look up
|
|
345
|
+
* @param payloadStatus - The specific payload status variant (PENDING/EMPTY/FULL)
|
|
346
|
+
* @returns The ProtoNode for the specified variant, or undefined if not found
|
|
347
|
+
*
|
|
348
|
+
* Note: Callers must explicitly specify which variant they need.
|
|
349
|
+
* Use getDefaultVariant() to get the canonical variant for a block.
|
|
350
|
+
*/
|
|
351
|
+
getNode(blockRoot: RootHex, payloadStatus: PayloadStatus): ProtoNode | undefined;
|
|
352
|
+
/**
|
|
353
|
+
* Return MUTABLE ProtoBlock for blockRoot with explicit payload status
|
|
354
|
+
*
|
|
355
|
+
* @param blockRoot - The block root to look up
|
|
356
|
+
* @param payloadStatus - The specific payload status variant (PENDING/EMPTY/FULL)
|
|
357
|
+
* @returns The ProtoBlock for the specified variant (spreads properties), or undefined if not found
|
|
358
|
+
*
|
|
359
|
+
* Note: Callers must explicitly specify which variant they need.
|
|
360
|
+
* Use getDefaultVariant() to get the canonical variant for a block.
|
|
361
|
+
*/
|
|
362
|
+
getBlock(blockRoot: RootHex, payloadStatus: PayloadStatus): ProtoBlock | undefined;
|
|
363
|
+
/**
|
|
364
|
+
* Return NON-MUTABLE ProtoBlock for blockRoot with explicit payload status
|
|
365
|
+
*
|
|
366
|
+
* @param blockRoot - The block root to look up
|
|
367
|
+
* @param payloadStatus - The specific payload status variant (PENDING/EMPTY/FULL)
|
|
368
|
+
* @returns The ProtoBlock for the specified variant (does not spread properties)
|
|
369
|
+
* @throws Error if block not found
|
|
370
|
+
*
|
|
371
|
+
* Note: Callers must explicitly specify which variant they need.
|
|
372
|
+
* Use getDefaultVariant() to get the canonical variant for a block.
|
|
373
|
+
*/
|
|
374
|
+
getBlockReadonly(blockRoot: RootHex, payloadStatus: PayloadStatus): ProtoBlock;
|
|
180
375
|
/**
|
|
181
376
|
* Returns `true` if the `descendantRoot` has an ancestor with `ancestorRoot`.
|
|
182
377
|
* Always returns `false` if either input roots are unknown.
|
|
183
|
-
* Still returns `true` if `ancestorRoot` === `descendantRoot`
|
|
378
|
+
* Still returns `true` if `ancestorRoot` === `descendantRoot` and payload statuses match.
|
|
184
379
|
*/
|
|
185
|
-
isDescendant(ancestorRoot: RootHex, descendantRoot: RootHex): boolean;
|
|
380
|
+
isDescendant(ancestorRoot: RootHex, ancestorPayloadStatus: PayloadStatus, descendantRoot: RootHex, descendantPayloadStatus: PayloadStatus): boolean;
|
|
186
381
|
/**
|
|
187
382
|
* Returns a common ancestor for nodeA or nodeB or null if there's none
|
|
188
383
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protoArray.d.ts","sourceRoot":"","sources":["../../src/protoArray/protoArray.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAC,MAAM,iBAAiB,CAAC;AAGrD,OAAO,EAAC,YAAY,EAAyD,MAAM,aAAa,CAAC;AACjG,OAAO,
|
|
1
|
+
{"version":3,"file":"protoArray.d.ts","sourceRoot":"","sources":["../../src/protoArray/protoArray.ts"],"names":[],"mappings":"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"}
|