@lodestar/fork-choice 1.35.0-dev.955e9f89ed → 1.35.0-dev.98d359db41
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.map +1 -0
- package/lib/forkChoice/forkChoice.d.ts +1 -1
- package/lib/forkChoice/forkChoice.d.ts.map +1 -0
- package/lib/forkChoice/forkChoice.js +39 -24
- package/lib/forkChoice/forkChoice.js.map +1 -1
- package/lib/forkChoice/interface.d.ts +1 -2
- package/lib/forkChoice/interface.d.ts.map +1 -0
- package/lib/forkChoice/interface.js.map +1 -1
- package/lib/forkChoice/store.d.ts.map +1 -0
- package/lib/forkChoice/store.js +8 -1
- package/lib/forkChoice/store.js.map +1 -1
- package/lib/index.d.ts +6 -6
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +4 -4
- package/lib/index.js.map +1 -1
- package/lib/metrics.d.ts.map +1 -0
- package/lib/protoArray/computeDeltas.d.ts.map +1 -0
- package/lib/protoArray/errors.d.ts.map +1 -0
- package/lib/protoArray/interface.d.ts.map +1 -0
- package/lib/protoArray/protoArray.d.ts.map +1 -0
- package/lib/protoArray/protoArray.js +11 -3
- package/lib/protoArray/protoArray.js.map +1 -1
- package/package.json +16 -13
- package/src/forkChoice/errors.ts +98 -0
- package/src/forkChoice/forkChoice.ts +1648 -0
- package/src/forkChoice/interface.ts +269 -0
- package/src/forkChoice/store.ts +124 -0
- package/src/index.ts +34 -0
- package/src/metrics.ts +71 -0
- package/src/protoArray/computeDeltas.ts +97 -0
- package/src/protoArray/errors.ts +59 -0
- package/src/protoArray/interface.ts +102 -0
- package/src/protoArray/protoArray.ts +1076 -0
package/package.json
CHANGED
|
@@ -11,16 +11,19 @@
|
|
|
11
11
|
"bugs": {
|
|
12
12
|
"url": "https://github.com/ChainSafe/lodestar/issues"
|
|
13
13
|
},
|
|
14
|
-
"version": "1.35.0-dev.
|
|
14
|
+
"version": "1.35.0-dev.98d359db41",
|
|
15
15
|
"type": "module",
|
|
16
|
-
"exports":
|
|
16
|
+
"exports": {
|
|
17
|
+
".": {
|
|
18
|
+
"bun": "./src/index.ts",
|
|
19
|
+
"import": "./lib/index.js"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
17
22
|
"types": "./lib/index.d.ts",
|
|
18
23
|
"files": [
|
|
19
|
-
"
|
|
20
|
-
"lib
|
|
21
|
-
"
|
|
22
|
-
"*.d.ts",
|
|
23
|
-
"*.js"
|
|
24
|
+
"src",
|
|
25
|
+
"lib",
|
|
26
|
+
"!**/*.tsbuildinfo"
|
|
24
27
|
],
|
|
25
28
|
"scripts": {
|
|
26
29
|
"clean": "rm -rf lib && rm -f *.tsbuildinfo",
|
|
@@ -37,11 +40,11 @@
|
|
|
37
40
|
},
|
|
38
41
|
"dependencies": {
|
|
39
42
|
"@chainsafe/ssz": "^1.2.2",
|
|
40
|
-
"@lodestar/config": "1.35.0-dev.
|
|
41
|
-
"@lodestar/params": "1.35.0-dev.
|
|
42
|
-
"@lodestar/state-transition": "1.35.0-dev.
|
|
43
|
-
"@lodestar/types": "1.35.0-dev.
|
|
44
|
-
"@lodestar/utils": "1.35.0-dev.
|
|
43
|
+
"@lodestar/config": "1.35.0-dev.98d359db41",
|
|
44
|
+
"@lodestar/params": "1.35.0-dev.98d359db41",
|
|
45
|
+
"@lodestar/state-transition": "1.35.0-dev.98d359db41",
|
|
46
|
+
"@lodestar/types": "1.35.0-dev.98d359db41",
|
|
47
|
+
"@lodestar/utils": "1.35.0-dev.98d359db41"
|
|
45
48
|
},
|
|
46
49
|
"keywords": [
|
|
47
50
|
"ethereum",
|
|
@@ -49,5 +52,5 @@
|
|
|
49
52
|
"beacon",
|
|
50
53
|
"blockchain"
|
|
51
54
|
],
|
|
52
|
-
"gitHead": "
|
|
55
|
+
"gitHead": "8b90f83d313e2dd3e7584faaa70269fe570fad25"
|
|
53
56
|
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import {Epoch, RootHex, Slot} from "@lodestar/types";
|
|
2
|
+
import {LodestarError} from "@lodestar/utils";
|
|
3
|
+
|
|
4
|
+
export enum InvalidBlockCode {
|
|
5
|
+
UNKNOWN_PARENT = "UNKNOWN_PARENT",
|
|
6
|
+
FUTURE_SLOT = "FUTURE_SLOT",
|
|
7
|
+
FINALIZED_SLOT = "FINALIZED_SLOT",
|
|
8
|
+
NOT_FINALIZED_DESCENDANT = "NOT_FINALIZED_DESCENDANT",
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export type InvalidBlock =
|
|
12
|
+
| {code: InvalidBlockCode.UNKNOWN_PARENT; root: RootHex}
|
|
13
|
+
| {code: InvalidBlockCode.FUTURE_SLOT; currentSlot: Slot; blockSlot: Slot}
|
|
14
|
+
| {code: InvalidBlockCode.FINALIZED_SLOT; finalizedSlot: Slot; blockSlot: Slot}
|
|
15
|
+
| {code: InvalidBlockCode.NOT_FINALIZED_DESCENDANT; finalizedRoot: RootHex; blockAncestor?: RootHex};
|
|
16
|
+
|
|
17
|
+
export enum InvalidAttestationCode {
|
|
18
|
+
/**
|
|
19
|
+
* The attestations aggregation bits were empty when they shouldn't be.
|
|
20
|
+
*/
|
|
21
|
+
EMPTY_AGGREGATION_BITFIELD = "EMPTY_AGGREGATION_BITFIELD",
|
|
22
|
+
/**
|
|
23
|
+
* The `attestation.data.beacon_block_root` block is unknown.
|
|
24
|
+
*/
|
|
25
|
+
UNKNOWN_HEAD_BLOCK = "UNKNOWN_HEAD_BLOCK",
|
|
26
|
+
/**
|
|
27
|
+
* The `attestation.data.slot` is not from the same epoch as `data.target.epoch` and therefore
|
|
28
|
+
* the attestation is invalid.
|
|
29
|
+
*/
|
|
30
|
+
BAD_TARGET_EPOCH = "BAD_TARGET_EPOCH",
|
|
31
|
+
/**
|
|
32
|
+
* The target root of the attestation points to a block that we have not verified.
|
|
33
|
+
*/
|
|
34
|
+
UNKNOWN_TARGET_ROOT = "UNKNOWN_TARGET_ROOT",
|
|
35
|
+
/**
|
|
36
|
+
* The attestation is for an epoch in the future (with respect to the gossip clock disparity).
|
|
37
|
+
*/
|
|
38
|
+
FUTURE_EPOCH = "FUTURE_EPOCH",
|
|
39
|
+
/**
|
|
40
|
+
* The attestation is for an epoch in the past (with respect to the gossip clock disparity).
|
|
41
|
+
*/
|
|
42
|
+
PAST_EPOCH = "PAST_EPOCH",
|
|
43
|
+
/**
|
|
44
|
+
* The attestation references a target root that does not match what is stored in our database.
|
|
45
|
+
*/
|
|
46
|
+
INVALID_TARGET = "INVALID_TARGET",
|
|
47
|
+
/**
|
|
48
|
+
* The attestation is attesting to a state that is later than itself. (Viz., attesting to the future).
|
|
49
|
+
*/
|
|
50
|
+
ATTESTS_TO_FUTURE_BLOCK = "ATTESTS_TO_FUTURE_BLOCK",
|
|
51
|
+
/**
|
|
52
|
+
* Attestations can only affect the fork choice of subsequent slots.
|
|
53
|
+
* Delay consideration in the fork choice until their slot is in the past.
|
|
54
|
+
*/
|
|
55
|
+
FUTURE_SLOT = "FUTURE_SLOT",
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export type InvalidAttestation =
|
|
59
|
+
| {code: InvalidAttestationCode.EMPTY_AGGREGATION_BITFIELD}
|
|
60
|
+
| {code: InvalidAttestationCode.UNKNOWN_HEAD_BLOCK; beaconBlockRoot: RootHex}
|
|
61
|
+
| {code: InvalidAttestationCode.BAD_TARGET_EPOCH; target: Epoch; slot: Slot}
|
|
62
|
+
| {code: InvalidAttestationCode.UNKNOWN_TARGET_ROOT; root: RootHex}
|
|
63
|
+
| {code: InvalidAttestationCode.FUTURE_EPOCH; attestationEpoch: Epoch; currentEpoch: Epoch}
|
|
64
|
+
| {code: InvalidAttestationCode.PAST_EPOCH; attestationEpoch: Epoch; currentEpoch: Epoch}
|
|
65
|
+
| {code: InvalidAttestationCode.INVALID_TARGET; attestation: RootHex; local: RootHex}
|
|
66
|
+
| {code: InvalidAttestationCode.ATTESTS_TO_FUTURE_BLOCK; block: Slot; attestation: Slot}
|
|
67
|
+
| {code: InvalidAttestationCode.FUTURE_SLOT; attestationSlot: Slot; latestPermissibleSlot: Slot};
|
|
68
|
+
|
|
69
|
+
export enum ForkChoiceErrorCode {
|
|
70
|
+
INVALID_ATTESTATION = "FORKCHOICE_ERROR_INVALID_ATTESTATION",
|
|
71
|
+
INVALID_BLOCK = "FORKCHOICE_ERROR_INVALID_BLOCK",
|
|
72
|
+
PROTO_ARRAY_ERROR = "FORKCHOICE_ERROR_PROTO_ARRAY_ERROR",
|
|
73
|
+
INVALID_PROTO_ARRAY_BYTES = "FORKCHOICE_ERROR_INVALID_PROTO_ARRAY_BYTES",
|
|
74
|
+
MISSING_PROTO_ARRAY_BLOCK = "FORKCHOICE_ERROR_MISSING_PROTO_ARRAY_BLOCK",
|
|
75
|
+
UNKNOWN_ANCESTOR = "FORKCHOICE_ERROR_UNKNOWN_ANCESTOR",
|
|
76
|
+
INCONSISTENT_ON_TICK = "FORKCHOICE_ERROR_INCONSISTENT_ON_TICK",
|
|
77
|
+
BEACON_STATE_ERROR = "FORKCHOICE_ERROR_BEACON_STATE_ERROR",
|
|
78
|
+
ATTEMPT_TO_REVERT_JUSTIFICATION = "FORKCHOICE_ERROR_ATTEMPT_TO_REVERT_JUSTIFICATION",
|
|
79
|
+
FORK_CHOICE_STORE_ERROR = "FORKCHOICE_ERROR_FORK_CHOICE_STORE_ERROR",
|
|
80
|
+
UNABLE_TO_SET_JUSTIFIED_CHECKPOINT = "FORKCHOICE_ERROR_UNABLE_TO_SET_JUSTIFIED_CHECKPOINT",
|
|
81
|
+
AFTER_BLOCK_FAILED = "FORKCHOICE_ERROR_AFTER_BLOCK_FAILED",
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export type ForkChoiceErrorType =
|
|
85
|
+
| {code: ForkChoiceErrorCode.INVALID_ATTESTATION; err: InvalidAttestation}
|
|
86
|
+
| {code: ForkChoiceErrorCode.INVALID_BLOCK; err: InvalidBlock}
|
|
87
|
+
| {code: ForkChoiceErrorCode.PROTO_ARRAY_ERROR; err: string}
|
|
88
|
+
| {code: ForkChoiceErrorCode.INVALID_PROTO_ARRAY_BYTES; err: string}
|
|
89
|
+
| {code: ForkChoiceErrorCode.MISSING_PROTO_ARRAY_BLOCK; root: RootHex}
|
|
90
|
+
| {code: ForkChoiceErrorCode.UNKNOWN_ANCESTOR; ancestorSlot: Slot; descendantRoot: RootHex}
|
|
91
|
+
| {code: ForkChoiceErrorCode.INCONSISTENT_ON_TICK; previousSlot: Slot; time: Slot}
|
|
92
|
+
| {code: ForkChoiceErrorCode.BEACON_STATE_ERROR; error: Error}
|
|
93
|
+
| {code: ForkChoiceErrorCode.ATTEMPT_TO_REVERT_JUSTIFICATION; store: Slot; state: Slot}
|
|
94
|
+
| {code: ForkChoiceErrorCode.FORK_CHOICE_STORE_ERROR; error: Error}
|
|
95
|
+
| {code: ForkChoiceErrorCode.UNABLE_TO_SET_JUSTIFIED_CHECKPOINT; error: Error}
|
|
96
|
+
| {code: ForkChoiceErrorCode.AFTER_BLOCK_FAILED; error: Error};
|
|
97
|
+
|
|
98
|
+
export class ForkChoiceError extends LodestarError<ForkChoiceErrorType> {}
|