@lodestar/validator 1.49.0-dev.ee7c2aa8ee → 1.49.0-dev.f1b14bce8f
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/services/validatorStore.d.ts +1 -1
- package/lib/services/validatorStore.d.ts.map +1 -1
- package/lib/services/validatorStore.js +7 -4
- package/lib/services/validatorStore.js.map +1 -1
- package/lib/slashingProtection/attestation/index.d.ts.map +1 -1
- package/lib/slashingProtection/attestation/index.js +19 -2
- package/lib/slashingProtection/attestation/index.js.map +1 -1
- package/lib/slashingProtection/block/errors.d.ts +8 -0
- package/lib/slashingProtection/block/errors.d.ts.map +1 -1
- package/lib/slashingProtection/block/errors.js +4 -0
- package/lib/slashingProtection/block/errors.js.map +1 -1
- package/lib/slashingProtection/block/index.d.ts +1 -0
- package/lib/slashingProtection/block/index.d.ts.map +1 -1
- package/lib/slashingProtection/block/index.js +48 -5
- package/lib/slashingProtection/block/index.js.map +1 -1
- package/lib/slashingProtection/index.d.ts +1 -1
- package/lib/slashingProtection/index.d.ts.map +1 -1
- package/lib/slashingProtection/index.js +18 -2
- package/lib/slashingProtection/index.js.map +1 -1
- package/lib/slashingProtection/interchange/errors.d.ts +11 -2
- package/lib/slashingProtection/interchange/errors.d.ts.map +1 -1
- package/lib/slashingProtection/interchange/errors.js +2 -0
- package/lib/slashingProtection/interchange/errors.js.map +1 -1
- package/lib/slashingProtection/interchange/formats/completeV4.js +4 -4
- package/lib/slashingProtection/interchange/formats/completeV4.js.map +1 -1
- package/lib/slashingProtection/interchange/formats/v5.js +4 -4
- package/lib/slashingProtection/interchange/formats/v5.js.map +1 -1
- package/lib/slashingProtection/interface.d.ts +5 -1
- package/lib/slashingProtection/interface.d.ts.map +1 -1
- package/lib/slashingProtection/utils.d.ts +5 -1
- package/lib/slashingProtection/utils.d.ts.map +1 -1
- package/lib/slashingProtection/utils.js +11 -0
- package/lib/slashingProtection/utils.js.map +1 -1
- package/lib/validator.d.ts.map +1 -1
- package/lib/validator.js +1 -1
- package/lib/validator.js.map +1 -1
- package/package.json +12 -12
- package/src/services/validatorStore.ts +9 -5
- package/src/slashingProtection/attestation/index.ts +19 -2
- package/src/slashingProtection/block/errors.ts +9 -0
- package/src/slashingProtection/block/index.ts +48 -6
- package/src/slashingProtection/index.ts +24 -1
- package/src/slashingProtection/interchange/errors.ts +6 -2
- package/src/slashingProtection/interchange/formats/completeV4.ts +4 -4
- package/src/slashingProtection/interchange/formats/v5.ts +4 -4
- package/src/slashingProtection/interface.ts +10 -1
- package/src/slashingProtection/utils.ts +12 -0
- package/src/validator.ts +6 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { fromHex, toPubkeyHex, toRootHex } from "@lodestar/utils";
|
|
2
|
-
import { fromOptionalHexString, numToString, toOptionalHexString } from "../../utils.js";
|
|
2
|
+
import { fromOptionalHexString, numToString, stringToNum, toOptionalHexString } from "../../utils.js";
|
|
3
3
|
export function serializeInterchangeCompleteV4({ data, genesisValidatorsRoot, }) {
|
|
4
4
|
return {
|
|
5
5
|
metadata: {
|
|
@@ -27,12 +27,12 @@ export function parseInterchangeCompleteV4(interchange) {
|
|
|
27
27
|
data: interchange.data.map((validator) => ({
|
|
28
28
|
pubkey: fromHex(validator.pubkey),
|
|
29
29
|
signedBlocks: validator.signed_blocks.map((block) => ({
|
|
30
|
-
slot:
|
|
30
|
+
slot: stringToNum(block.slot),
|
|
31
31
|
signingRoot: fromOptionalHexString(block.signing_root),
|
|
32
32
|
})),
|
|
33
33
|
signedAttestations: validator.signed_attestations.map((att) => ({
|
|
34
|
-
sourceEpoch:
|
|
35
|
-
targetEpoch:
|
|
34
|
+
sourceEpoch: stringToNum(att.source_epoch),
|
|
35
|
+
targetEpoch: stringToNum(att.target_epoch),
|
|
36
36
|
signingRoot: fromOptionalHexString(att.signing_root),
|
|
37
37
|
})),
|
|
38
38
|
})),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completeV4.js","sourceRoot":"","sources":["../../../../src/slashingProtection/interchange/formats/completeV4.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAC,qBAAqB,EAAE,WAAW,EAAE,mBAAmB,EAAC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"completeV4.js","sourceRoot":"","sources":["../../../../src/slashingProtection/interchange/formats/completeV4.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAC,qBAAqB,EAAE,WAAW,EAAE,WAAW,EAAE,mBAAmB,EAAC,MAAM,gBAAgB,CAAC;AAkFpG,MAAM,UAAU,8BAA8B,CAAC,EAC7C,IAAI,EACJ,qBAAqB,GACD;IACpB,OAAO;QACL,QAAQ,EAAE;YACR,kBAAkB,EAAE,UAAU;YAC9B,0BAA0B,EAAE,GAAG;YAC/B,uBAAuB,EAAE,SAAS,CAAC,qBAAqB,CAAC;SAC1D;QACD,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAC7B,MAAM,EAAE,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC;YACrC,aAAa,EAAE,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACpD,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC7B,YAAY,EAAE,mBAAmB,CAAC,KAAK,CAAC,WAAW,CAAC;aACrD,CAAC,CAAC;YACH,mBAAmB,EAAE,SAAS,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAC9D,YAAY,EAAE,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;gBAC1C,YAAY,EAAE,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;gBAC1C,YAAY,EAAE,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC;aACnD,CAAC,CAAC;SACJ,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,WAAkC;IAC3E,OAAO;QACL,qBAAqB,EAAE,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAC5E,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YACzC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC;YACjC,YAAY,EAAE,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACpD,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC7B,WAAW,EAAE,qBAAqB,CAAC,KAAK,CAAC,YAAY,CAAC;aACvD,CAAC,CAAC;YACH,kBAAkB,EAAE,SAAS,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAC9D,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC;gBAC1C,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC;gBAC1C,WAAW,EAAE,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAC;aACrD,CAAC,CAAC;SACJ,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { fromHex, toPubkeyHex, toRootHex } from "@lodestar/utils";
|
|
2
|
-
import { fromOptionalHexString, numToString, toOptionalHexString } from "../../utils.js";
|
|
2
|
+
import { fromOptionalHexString, numToString, stringToNum, toOptionalHexString } from "../../utils.js";
|
|
3
3
|
export function serializeInterchangeV5({ data, genesisValidatorsRoot }) {
|
|
4
4
|
return {
|
|
5
5
|
metadata: {
|
|
@@ -26,12 +26,12 @@ export function parseInterchangeV5(interchange) {
|
|
|
26
26
|
data: interchange.data.map((validator) => ({
|
|
27
27
|
pubkey: fromHex(validator.pubkey),
|
|
28
28
|
signedBlocks: validator.signed_blocks.map((block) => ({
|
|
29
|
-
slot:
|
|
29
|
+
slot: stringToNum(block.slot),
|
|
30
30
|
signingRoot: fromOptionalHexString(block.signing_root),
|
|
31
31
|
})),
|
|
32
32
|
signedAttestations: validator.signed_attestations.map((att) => ({
|
|
33
|
-
sourceEpoch:
|
|
34
|
-
targetEpoch:
|
|
33
|
+
sourceEpoch: stringToNum(att.source_epoch),
|
|
34
|
+
targetEpoch: stringToNum(att.target_epoch),
|
|
35
35
|
signingRoot: fromOptionalHexString(att.signing_root),
|
|
36
36
|
})),
|
|
37
37
|
})),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"v5.js","sourceRoot":"","sources":["../../../../src/slashingProtection/interchange/formats/v5.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAC,qBAAqB,EAAE,WAAW,EAAE,mBAAmB,EAAC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"v5.js","sourceRoot":"","sources":["../../../../src/slashingProtection/interchange/formats/v5.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAC,qBAAqB,EAAE,WAAW,EAAE,WAAW,EAAE,mBAAmB,EAAC,MAAM,gBAAgB,CAAC;AAiFpG,MAAM,UAAU,sBAAsB,CAAC,EAAC,IAAI,EAAE,qBAAqB,EAAsB;IACvF,OAAO;QACL,QAAQ,EAAE;YACR,0BAA0B,EAAE,GAAG;YAC/B,uBAAuB,EAAE,SAAS,CAAC,qBAAqB,CAAC;SAC1D;QACD,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAC7B,MAAM,EAAE,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC;YACrC,aAAa,EAAE,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACpD,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC7B,YAAY,EAAE,mBAAmB,CAAC,KAAK,CAAC,WAAW,CAAC;aACrD,CAAC,CAAC;YACH,mBAAmB,EAAE,SAAS,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAC9D,YAAY,EAAE,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;gBAC1C,YAAY,EAAE,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;gBAC1C,YAAY,EAAE,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC;aACnD,CAAC,CAAC;SACJ,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,WAA0B;IAC3D,OAAO;QACL,qBAAqB,EAAE,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAC5E,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YACzC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC;YACjC,YAAY,EAAE,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACpD,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC7B,WAAW,EAAE,qBAAqB,CAAC,KAAK,CAAC,YAAY,CAAC;aACvD,CAAC,CAAC;YACH,kBAAkB,EAAE,SAAS,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAC9D,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC;gBAC1C,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC;gBAC1C,WAAW,EAAE,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAC;aACrD,CAAC,CAAC;SACJ,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
|
|
@@ -15,7 +15,11 @@ export interface ISlashingProtection {
|
|
|
15
15
|
* Check whether a validator as identified by `pubKey` has attested in the specified `epoch`
|
|
16
16
|
*/
|
|
17
17
|
hasAttestedInEpoch(pubKey: BLSPubkey, epoch: Epoch): Promise<boolean>;
|
|
18
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Import an EIP-3076 interchange, rejects attestations with a target epoch more than one epoch after `currentEpoch`
|
|
20
|
+
* (or genesis if earlier)
|
|
21
|
+
*/
|
|
22
|
+
importInterchange(interchange: Interchange, genesisValidatorsRoot: Uint8Array | Root, logger?: Logger, currentEpoch?: Epoch): Promise<void>;
|
|
19
23
|
exportInterchange(genesisValidatorsRoot: Uint8Array | Root, pubkeys: BLSPubkey[], formatVersion: InterchangeFormatVersion, logger?: Logger): Promise<Interchange>;
|
|
20
24
|
}
|
|
21
25
|
//# sourceMappingURL=interface.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/slashingProtection/interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAC,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAC,WAAW,EAAE,wBAAwB,EAAC,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAC,6BAA6B,EAAE,uBAAuB,EAAC,MAAM,YAAY,CAAC;AAElF,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,2BAA2B,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9F;;OAEG;IACH,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExG;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/slashingProtection/interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAC,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAC,WAAW,EAAE,wBAAwB,EAAC,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAC,6BAA6B,EAAE,uBAAuB,EAAC,MAAM,YAAY,CAAC;AAElF,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,2BAA2B,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9F;;OAEG;IACH,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExG;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtE;;;OAGG;IACH,iBAAiB,CACf,WAAW,EAAE,WAAW,EACxB,qBAAqB,EAAE,UAAU,GAAG,IAAI,EACxC,MAAM,CAAC,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,KAAK,GACnB,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,iBAAiB,CACf,qBAAqB,EAAE,UAAU,GAAG,IAAI,EACxC,OAAO,EAAE,SAAS,EAAE,EACpB,aAAa,EAAE,wBAAwB,EACvC,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,WAAW,CAAC,CAAC;CACzB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Epoch, Root } from "@lodestar/types";
|
|
2
2
|
export declare const blsPubkeyLen = 48;
|
|
3
|
-
export declare const ZERO_ROOT: import("@chainsafe/ssz/lib/type/byteArray").ByteArray;
|
|
3
|
+
export declare const ZERO_ROOT: import("@chainsafe/ssz/lib/type/byteArray.js").ByteArray;
|
|
4
4
|
export declare function isEqualRoot(root1: Root, root2: Root): boolean;
|
|
5
5
|
export declare function isEqualNonZeroRoot(root1: Root, root2: Root): boolean;
|
|
6
6
|
export declare function fromOptionalHexString(hex: string | undefined): Root;
|
|
@@ -9,6 +9,10 @@ export declare function toOptionalHexString(root: Root): string | undefined;
|
|
|
9
9
|
* Typesafe wrapper around `String()`. The String constructor accepts any which is dangerous
|
|
10
10
|
*/
|
|
11
11
|
export declare function numToString(num: number): string;
|
|
12
|
+
/**
|
|
13
|
+
* Parse a decimal uint string, rejecting values the slashing protection DB range scans cannot see
|
|
14
|
+
*/
|
|
15
|
+
export declare function stringToNum(str: string): number;
|
|
12
16
|
export declare function minEpoch(epochs: Epoch[]): Epoch | null;
|
|
13
17
|
export declare function uniqueVectorArr(buffers: Uint8Array[]): Uint8Array[];
|
|
14
18
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/slashingProtection/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,IAAI,EAAM,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/slashingProtection/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,IAAI,EAAM,MAAM,iBAAiB,CAAC;AAIjD,eAAO,MAAM,YAAY,KAAK,CAAC;AAC/B,eAAO,MAAM,SAAS,0DAA0B,CAAC;AAEjD,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,OAAO,CAE7D;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,OAAO,CAEpE;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAEnE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAElE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM/C;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,GAAG,IAAI,CAEtD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAQnE"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ssz } from "@lodestar/types";
|
|
2
2
|
import { fromHex, toHex, toRootHex } from "@lodestar/utils";
|
|
3
|
+
import { InterchangeError, InterchangeErrorErrorCode } from "./interchange/errors.js";
|
|
3
4
|
export const blsPubkeyLen = 48;
|
|
4
5
|
export const ZERO_ROOT = ssz.Root.defaultValue();
|
|
5
6
|
export function isEqualRoot(root1, root2) {
|
|
@@ -20,6 +21,16 @@ export function toOptionalHexString(root) {
|
|
|
20
21
|
export function numToString(num) {
|
|
21
22
|
return String(num);
|
|
22
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Parse a decimal uint string, rejecting values the slashing protection DB range scans cannot see
|
|
26
|
+
*/
|
|
27
|
+
export function stringToNum(str) {
|
|
28
|
+
const num = Number(str);
|
|
29
|
+
if (!/^[0-9]+$/.test(str) || num >= Number.MAX_SAFE_INTEGER) {
|
|
30
|
+
throw new InterchangeError({ code: InterchangeErrorErrorCode.INVALID_VALUE, value: str });
|
|
31
|
+
}
|
|
32
|
+
return num;
|
|
33
|
+
}
|
|
23
34
|
export function minEpoch(epochs) {
|
|
24
35
|
return epochs.length > 0 ? epochs.reduce((minEpoch, epoch) => (minEpoch < epoch ? minEpoch : epoch)) : null;
|
|
25
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/slashingProtection/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,GAAG,EAAC,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/slashingProtection/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,GAAG,EAAC,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAC,gBAAgB,EAAE,yBAAyB,EAAC,MAAM,yBAAyB,CAAC;AAEpF,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;AAC/B,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;AAEjD,MAAM,UAAU,WAAW,CAAC,KAAW,EAAE,KAAW;IAClD,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAW,EAAE,KAAW;IACzD,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,GAAuB;IAC3D,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAU;IAC5C,OAAO,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACxB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC5D,MAAM,IAAI,gBAAgB,CAAC,EAAC,IAAI,EAAE,yBAAyB,CAAC,aAAa,EAAE,KAAK,EAAE,GAAG,EAAC,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAAe;IACtC,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9G,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAqB;IACnD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;QAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/lib/validator.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"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"}
|
package/lib/validator.js
CHANGED
|
@@ -248,7 +248,7 @@ export class Validator {
|
|
|
248
248
|
this.state = Status.closed;
|
|
249
249
|
}
|
|
250
250
|
async importInterchange(interchange) {
|
|
251
|
-
return this.slashingProtection.importInterchange(interchange, this.genesis.genesisValidatorsRoot);
|
|
251
|
+
return this.slashingProtection.importInterchange(interchange, this.genesis.genesisValidatorsRoot, undefined, this.clock.currentEpoch);
|
|
252
252
|
}
|
|
253
253
|
async exportInterchange(pubkeys, formatVersion) {
|
|
254
254
|
return this.slashingProtection.exportInterchange(this.genesis.genesisValidatorsRoot, pubkeys, formatVersion);
|
package/lib/validator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lodestar/validator",
|
|
3
|
-
"version": "1.49.0-dev.
|
|
3
|
+
"version": "1.49.0-dev.f1b14bce8f",
|
|
4
4
|
"description": "A Typescript implementation of the validator client",
|
|
5
5
|
"author": "ChainSafe Systems",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -50,21 +50,21 @@
|
|
|
50
50
|
"dependencies": {
|
|
51
51
|
"@chainsafe/lodestar-z": "catalog:",
|
|
52
52
|
"@chainsafe/ssz": "^1.8.0",
|
|
53
|
-
"@lodestar/api": "^1.49.0-dev.
|
|
54
|
-
"@lodestar/config": "^1.49.0-dev.
|
|
55
|
-
"@lodestar/db": "^1.49.0-dev.
|
|
56
|
-
"@lodestar/params": "^1.49.0-dev.
|
|
57
|
-
"@lodestar/state-transition": "^1.49.0-dev.
|
|
58
|
-
"@lodestar/types": "^1.49.0-dev.
|
|
59
|
-
"@lodestar/utils": "^1.49.0-dev.
|
|
53
|
+
"@lodestar/api": "^1.49.0-dev.f1b14bce8f",
|
|
54
|
+
"@lodestar/config": "^1.49.0-dev.f1b14bce8f",
|
|
55
|
+
"@lodestar/db": "^1.49.0-dev.f1b14bce8f",
|
|
56
|
+
"@lodestar/params": "^1.49.0-dev.f1b14bce8f",
|
|
57
|
+
"@lodestar/state-transition": "^1.49.0-dev.f1b14bce8f",
|
|
58
|
+
"@lodestar/types": "^1.49.0-dev.f1b14bce8f",
|
|
59
|
+
"@lodestar/utils": "^1.49.0-dev.f1b14bce8f",
|
|
60
60
|
"strict-event-emitter-types": "^2.0.0"
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|
|
63
|
-
"@lodestar/logger": "^1.49.0-dev.
|
|
64
|
-
"@lodestar/spec-test-util": "^1.49.0-dev.
|
|
65
|
-
"@lodestar/test-utils": "^1.49.0-dev.
|
|
63
|
+
"@lodestar/logger": "^1.49.0-dev.f1b14bce8f",
|
|
64
|
+
"@lodestar/spec-test-util": "^1.49.0-dev.f1b14bce8f",
|
|
65
|
+
"@lodestar/test-utils": "^1.49.0-dev.f1b14bce8f",
|
|
66
66
|
"@vekexasia/bigint-buffer2": "^1.1.1",
|
|
67
67
|
"rimraf": "^4.4.1"
|
|
68
68
|
},
|
|
69
|
-
"gitHead": "
|
|
69
|
+
"gitHead": "c417ba57a2bc53d9ec5f7605badd031b802352e5"
|
|
70
70
|
}
|
|
@@ -51,7 +51,7 @@ import {
|
|
|
51
51
|
} from "@lodestar/types";
|
|
52
52
|
import {fromHex, isValidAsciiHttpUrl, toHex, toPubkeyHex, toRootHex} from "@lodestar/utils";
|
|
53
53
|
import {Metrics} from "../metrics.js";
|
|
54
|
-
import {ISlashingProtection} from "../slashingProtection/index.js";
|
|
54
|
+
import {ISlashingProtection, InvalidBlockError, InvalidBlockErrorCode} from "../slashingProtection/index.js";
|
|
55
55
|
import {PubkeyHex} from "../types.js";
|
|
56
56
|
import {SignableMessage, SignableMessageType, externalSignerPostSignature} from "../util/externalSignerClient.js";
|
|
57
57
|
import {isValidatePubkeyHex} from "../util/format.js";
|
|
@@ -666,12 +666,11 @@ export class ValidatorStore {
|
|
|
666
666
|
async signBlock(
|
|
667
667
|
pubkey: BLSPubkey,
|
|
668
668
|
blindedOrFull: BeaconBlock | BlindedBeaconBlock,
|
|
669
|
-
|
|
669
|
+
dutySlot: Slot,
|
|
670
670
|
logger?: LoggerVc
|
|
671
671
|
): Promise<SignedBeaconBlock | SignedBlindedBeaconBlock> {
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
throw Error(`Not signing block with slot ${blindedOrFull.slot} greater than current slot ${currentSlot}`);
|
|
672
|
+
if (blindedOrFull.slot !== dutySlot) {
|
|
673
|
+
throw new InvalidBlockError({code: InvalidBlockErrorCode.SLOT_MISMATCH, slot: blindedOrFull.slot, dutySlot});
|
|
675
674
|
}
|
|
676
675
|
|
|
677
676
|
// Duties are filtered before-hard by doppelganger-safe, this assert should never throw
|
|
@@ -1188,6 +1187,11 @@ export class ValidatorStore {
|
|
|
1188
1187
|
if (duty.slot !== data.slot) {
|
|
1189
1188
|
throw Error(`Inconsistent duties during signing: duty.slot ${duty.slot} != att.slot ${data.slot}`);
|
|
1190
1189
|
}
|
|
1190
|
+
if (data.target.epoch !== computeEpochAtSlot(data.slot)) {
|
|
1191
|
+
throw Error(
|
|
1192
|
+
`Inconsistent attestation data during signing: att.target.epoch ${data.target.epoch} != epoch of att.slot ${data.slot}`
|
|
1193
|
+
);
|
|
1194
|
+
}
|
|
1191
1195
|
|
|
1192
1196
|
const forkSeq = this.config.getForkSeq(data.slot);
|
|
1193
1197
|
const isPostElectra = forkSeq >= ForkSeq.electra;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {BLSPubkey, Epoch} from "@lodestar/types";
|
|
2
2
|
import {MinMaxSurround, SurroundAttestationError, SurroundAttestationErrorCode} from "../minMaxSurround/index.js";
|
|
3
3
|
import {SlashingProtectionAttestation} from "../types.js";
|
|
4
|
-
import {isEqualNonZeroRoot, minEpoch} from "../utils.js";
|
|
4
|
+
import {ZERO_ROOT, isEqualNonZeroRoot, isEqualRoot, minEpoch} from "../utils.js";
|
|
5
5
|
import {AttestationByTargetRepository} from "./attestationByTargetRepository.js";
|
|
6
6
|
import {AttestationLowerBoundRepository} from "./attestationLowerBoundRepository.js";
|
|
7
7
|
import {InvalidAttestationError, InvalidAttestationErrorCode} from "./errors.js";
|
|
@@ -184,7 +184,24 @@ export class SlashingProtectionAttestationService {
|
|
|
184
184
|
});
|
|
185
185
|
}
|
|
186
186
|
|
|
187
|
-
|
|
187
|
+
// Never replace a recorded attestation with a different source or signing root, a zero root refuses any attestation
|
|
188
|
+
// with that target. The highest source epoch is kept as the latest attestation must have it, see above.
|
|
189
|
+
const attestationsByTarget = new Map<Epoch, SlashingProtectionAttestation>();
|
|
190
|
+
for (const attestation of attestations) {
|
|
191
|
+
const {sourceEpoch, targetEpoch, signingRoot} = attestation;
|
|
192
|
+
const prevAtt =
|
|
193
|
+
attestationsByTarget.get(targetEpoch) ?? (await this.attestationByTarget.get(pubkey, targetEpoch));
|
|
194
|
+
if (prevAtt === null || (prevAtt.sourceEpoch === sourceEpoch && isEqualRoot(prevAtt.signingRoot, signingRoot))) {
|
|
195
|
+
attestationsByTarget.set(targetEpoch, attestation);
|
|
196
|
+
} else {
|
|
197
|
+
attestationsByTarget.set(targetEpoch, {
|
|
198
|
+
sourceEpoch: Math.max(prevAtt.sourceEpoch, sourceEpoch),
|
|
199
|
+
targetEpoch,
|
|
200
|
+
signingRoot: ZERO_ROOT,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
await this.attestationByTarget.set(pubkey, Array.from(attestationsByTarget.values()));
|
|
188
205
|
|
|
189
206
|
// Pre-compute spans for all attestations
|
|
190
207
|
for (const attestation of attestations) {
|
|
@@ -3,6 +3,10 @@ import {LodestarError} from "@lodestar/utils";
|
|
|
3
3
|
import {SlashingProtectionBlock} from "../types.js";
|
|
4
4
|
|
|
5
5
|
export enum InvalidBlockErrorCode {
|
|
6
|
+
/**
|
|
7
|
+
* The block slot does not match the slot of the proposal duty
|
|
8
|
+
*/
|
|
9
|
+
SLOT_MISMATCH = "ERR_INVALID_BLOCK_SLOT_MISMATCH",
|
|
6
10
|
/**
|
|
7
11
|
* The block has the same slot as a block from the DB
|
|
8
12
|
*/
|
|
@@ -14,6 +18,11 @@ export enum InvalidBlockErrorCode {
|
|
|
14
18
|
}
|
|
15
19
|
|
|
16
20
|
type InvalidBlockErrorType =
|
|
21
|
+
| {
|
|
22
|
+
code: InvalidBlockErrorCode.SLOT_MISMATCH;
|
|
23
|
+
slot: Slot;
|
|
24
|
+
dutySlot: Slot;
|
|
25
|
+
}
|
|
17
26
|
| {
|
|
18
27
|
code: InvalidBlockErrorCode.DOUBLE_BLOCK_PROPOSAL;
|
|
19
28
|
block: SlashingProtectionBlock;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {BLSPubkey} from "@lodestar/types";
|
|
1
|
+
import {BLSPubkey, Slot} from "@lodestar/types";
|
|
2
|
+
import {defer, toPubkeyHex} from "@lodestar/utils";
|
|
2
3
|
import {SlashingProtectionBlock} from "../types.js";
|
|
3
|
-
import {isEqualNonZeroRoot} from "../utils.js";
|
|
4
|
+
import {ZERO_ROOT, isEqualNonZeroRoot, isEqualRoot} from "../utils.js";
|
|
4
5
|
import {BlockBySlotRepository} from "./blockBySlotRepository.js";
|
|
5
6
|
import {InvalidBlockError, InvalidBlockErrorCode} from "./errors.js";
|
|
6
7
|
export {BlockBySlotRepository, InvalidBlockError, InvalidBlockErrorCode};
|
|
@@ -12,6 +13,7 @@ enum SafeStatus {
|
|
|
12
13
|
|
|
13
14
|
export class SlashingProtectionBlockService {
|
|
14
15
|
private blockBySlot: BlockBySlotRepository;
|
|
16
|
+
private readonly pendingProposals = new Map<string, Promise<void>>();
|
|
15
17
|
|
|
16
18
|
constructor(blockBySlot: BlockBySlotRepository) {
|
|
17
19
|
this.blockBySlot = blockBySlot;
|
|
@@ -22,10 +24,25 @@ export class SlashingProtectionBlockService {
|
|
|
22
24
|
* This is the safe, externally-callable interface for checking block proposals.
|
|
23
25
|
*/
|
|
24
26
|
async checkAndInsertBlockProposal(pubkey: BLSPubkey, block: SlashingProtectionBlock): Promise<void> {
|
|
25
|
-
const
|
|
27
|
+
const pubkeyHex = toPubkeyHex(pubkey);
|
|
28
|
+
const previous = this.pendingProposals.get(pubkeyHex);
|
|
29
|
+
const {promise, resolve} = defer<void>();
|
|
30
|
+
this.pendingProposals.set(pubkeyHex, promise);
|
|
26
31
|
|
|
27
|
-
|
|
28
|
-
|
|
32
|
+
try {
|
|
33
|
+
if (previous !== undefined) {
|
|
34
|
+
await previous;
|
|
35
|
+
}
|
|
36
|
+
const safeStatus = await this.checkBlockProposal(pubkey, block);
|
|
37
|
+
|
|
38
|
+
if (safeStatus !== SafeStatus.SAME_DATA) {
|
|
39
|
+
await this.insertBlockProposal(pubkey, block);
|
|
40
|
+
}
|
|
41
|
+
} finally {
|
|
42
|
+
resolve();
|
|
43
|
+
if (this.pendingProposals.get(pubkeyHex) === promise) {
|
|
44
|
+
this.pendingProposals.delete(pubkeyHex);
|
|
45
|
+
}
|
|
29
46
|
}
|
|
30
47
|
|
|
31
48
|
// TODO: Implement safe clean-up of stored blocks
|
|
@@ -78,7 +95,32 @@ export class SlashingProtectionBlockService {
|
|
|
78
95
|
* Interchange import / export functionality
|
|
79
96
|
*/
|
|
80
97
|
async importBlocks(pubkey: BLSPubkey, blocks: SlashingProtectionBlock[]): Promise<void> {
|
|
81
|
-
|
|
98
|
+
const pubkeyHex = toPubkeyHex(pubkey);
|
|
99
|
+
const previous = this.pendingProposals.get(pubkeyHex);
|
|
100
|
+
const {promise, resolve} = defer<void>();
|
|
101
|
+
this.pendingProposals.set(pubkeyHex, promise);
|
|
102
|
+
|
|
103
|
+
try {
|
|
104
|
+
if (previous !== undefined) {
|
|
105
|
+
await previous;
|
|
106
|
+
}
|
|
107
|
+
// Never replace a recorded block with a different signing root, a zero root refuses any block at that slot
|
|
108
|
+
const blocksBySlot = new Map<Slot, SlashingProtectionBlock>();
|
|
109
|
+
for (const block of blocks) {
|
|
110
|
+
const prevBlock = blocksBySlot.get(block.slot) ?? (await this.blockBySlot.get(pubkey, block.slot));
|
|
111
|
+
if (prevBlock === null || isEqualRoot(prevBlock.signingRoot, block.signingRoot)) {
|
|
112
|
+
blocksBySlot.set(block.slot, block);
|
|
113
|
+
} else {
|
|
114
|
+
blocksBySlot.set(block.slot, {slot: block.slot, signingRoot: ZERO_ROOT});
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
await this.blockBySlot.set(pubkey, Array.from(blocksBySlot.values()));
|
|
118
|
+
} finally {
|
|
119
|
+
resolve();
|
|
120
|
+
if (this.pendingProposals.get(pubkeyHex) === promise) {
|
|
121
|
+
this.pendingProposals.delete(pubkeyHex);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
82
124
|
}
|
|
83
125
|
|
|
84
126
|
/**
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import {GENESIS_EPOCH} from "@lodestar/params";
|
|
1
2
|
import {BLSPubkey, Epoch, Root} from "@lodestar/types";
|
|
2
3
|
import {Logger, toPubkeyHex} from "@lodestar/utils";
|
|
3
4
|
import {uniqueVectorArr} from "../slashingProtection/utils.js";
|
|
@@ -10,6 +11,8 @@ import {
|
|
|
10
11
|
import {BlockBySlotRepository, SlashingProtectionBlockService} from "./block/index.js";
|
|
11
12
|
import {
|
|
12
13
|
Interchange,
|
|
14
|
+
InterchangeError,
|
|
15
|
+
InterchangeErrorErrorCode,
|
|
13
16
|
InterchangeFormatVersion,
|
|
14
17
|
InterchangeLodestar,
|
|
15
18
|
parseInterchange,
|
|
@@ -59,8 +62,28 @@ export class SlashingProtection implements ISlashingProtection {
|
|
|
59
62
|
return (await this.attestationService.getAttestationForEpoch(pubKey, epoch)) !== null;
|
|
60
63
|
}
|
|
61
64
|
|
|
62
|
-
async importInterchange(
|
|
65
|
+
async importInterchange(
|
|
66
|
+
interchange: Interchange,
|
|
67
|
+
genesisValidatorsRoot: Root,
|
|
68
|
+
logger?: Logger,
|
|
69
|
+
currentEpoch?: Epoch
|
|
70
|
+
): Promise<void> {
|
|
63
71
|
const {data} = parseInterchange(interchange, genesisValidatorsRoot);
|
|
72
|
+
if (currentEpoch !== undefined) {
|
|
73
|
+
// Min-max span updates read the db for each epoch between source and target, allow one epoch of clock disparity
|
|
74
|
+
const maxTargetEpoch = Math.max(currentEpoch, GENESIS_EPOCH) + 1;
|
|
75
|
+
for (const validator of data) {
|
|
76
|
+
for (const {targetEpoch} of validator.signedAttestations) {
|
|
77
|
+
if (targetEpoch > maxTargetEpoch) {
|
|
78
|
+
throw new InterchangeError({
|
|
79
|
+
code: InterchangeErrorErrorCode.FUTURE_TARGET_EPOCH,
|
|
80
|
+
targetEpoch,
|
|
81
|
+
currentEpoch,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
64
87
|
for (const validator of data) {
|
|
65
88
|
logger?.info("Importing slashing protection", {pubkey: toPubkeyHex(validator.pubkey)});
|
|
66
89
|
await this.blockService.importBlocks(validator.pubkey, validator.signedBlocks);
|
|
@@ -1,15 +1,19 @@
|
|
|
1
|
-
import {Root} from "@lodestar/types";
|
|
1
|
+
import {Epoch, Root} from "@lodestar/types";
|
|
2
2
|
import {LodestarError} from "@lodestar/utils";
|
|
3
3
|
|
|
4
4
|
export enum InterchangeErrorErrorCode {
|
|
5
5
|
UNSUPPORTED_FORMAT = "ERR_INTERCHANGE_UNSUPPORTED_FORMAT",
|
|
6
6
|
UNSUPPORTED_VERSION = "ERR_INTERCHANGE_UNSUPPORTED_VERSION",
|
|
7
7
|
GENESIS_VALIDATOR_MISMATCH = "ERR_INTERCHANGE_GENESIS_VALIDATOR_MISMATCH",
|
|
8
|
+
INVALID_VALUE = "ERR_INTERCHANGE_INVALID_VALUE",
|
|
9
|
+
FUTURE_TARGET_EPOCH = "ERR_INTERCHANGE_FUTURE_TARGET_EPOCH",
|
|
8
10
|
}
|
|
9
11
|
|
|
10
12
|
type InterchangeErrorErrorType =
|
|
11
13
|
| {code: InterchangeErrorErrorCode.UNSUPPORTED_FORMAT; format: string}
|
|
12
14
|
| {code: InterchangeErrorErrorCode.UNSUPPORTED_VERSION; version: string}
|
|
13
|
-
| {code: InterchangeErrorErrorCode.GENESIS_VALIDATOR_MISMATCH; root: Root; expectedRoot: Root}
|
|
15
|
+
| {code: InterchangeErrorErrorCode.GENESIS_VALIDATOR_MISMATCH; root: Root; expectedRoot: Root}
|
|
16
|
+
| {code: InterchangeErrorErrorCode.INVALID_VALUE; value: string}
|
|
17
|
+
| {code: InterchangeErrorErrorCode.FUTURE_TARGET_EPOCH; targetEpoch: Epoch; currentEpoch: Epoch};
|
|
14
18
|
|
|
15
19
|
export class InterchangeError extends LodestarError<InterchangeErrorErrorType> {}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {fromHex, toPubkeyHex, toRootHex} from "@lodestar/utils";
|
|
2
|
-
import {fromOptionalHexString, numToString, toOptionalHexString} from "../../utils.js";
|
|
2
|
+
import {fromOptionalHexString, numToString, stringToNum, toOptionalHexString} from "../../utils.js";
|
|
3
3
|
import {InterchangeLodestar} from "../types.js";
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -112,12 +112,12 @@ export function parseInterchangeCompleteV4(interchange: InterchangeCompleteV4):
|
|
|
112
112
|
data: interchange.data.map((validator) => ({
|
|
113
113
|
pubkey: fromHex(validator.pubkey),
|
|
114
114
|
signedBlocks: validator.signed_blocks.map((block) => ({
|
|
115
|
-
slot:
|
|
115
|
+
slot: stringToNum(block.slot),
|
|
116
116
|
signingRoot: fromOptionalHexString(block.signing_root),
|
|
117
117
|
})),
|
|
118
118
|
signedAttestations: validator.signed_attestations.map((att) => ({
|
|
119
|
-
sourceEpoch:
|
|
120
|
-
targetEpoch:
|
|
119
|
+
sourceEpoch: stringToNum(att.source_epoch),
|
|
120
|
+
targetEpoch: stringToNum(att.target_epoch),
|
|
121
121
|
signingRoot: fromOptionalHexString(att.signing_root),
|
|
122
122
|
})),
|
|
123
123
|
})),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {fromHex, toPubkeyHex, toRootHex} from "@lodestar/utils";
|
|
2
|
-
import {fromOptionalHexString, numToString, toOptionalHexString} from "../../utils.js";
|
|
2
|
+
import {fromOptionalHexString, numToString, stringToNum, toOptionalHexString} from "../../utils.js";
|
|
3
3
|
import {InterchangeLodestar} from "../types.js";
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -107,12 +107,12 @@ export function parseInterchangeV5(interchange: InterchangeV5): InterchangeLodes
|
|
|
107
107
|
data: interchange.data.map((validator) => ({
|
|
108
108
|
pubkey: fromHex(validator.pubkey),
|
|
109
109
|
signedBlocks: validator.signed_blocks.map((block) => ({
|
|
110
|
-
slot:
|
|
110
|
+
slot: stringToNum(block.slot),
|
|
111
111
|
signingRoot: fromOptionalHexString(block.signing_root),
|
|
112
112
|
})),
|
|
113
113
|
signedAttestations: validator.signed_attestations.map((att) => ({
|
|
114
|
-
sourceEpoch:
|
|
115
|
-
targetEpoch:
|
|
114
|
+
sourceEpoch: stringToNum(att.source_epoch),
|
|
115
|
+
targetEpoch: stringToNum(att.target_epoch),
|
|
116
116
|
signingRoot: fromOptionalHexString(att.signing_root),
|
|
117
117
|
})),
|
|
118
118
|
})),
|
|
@@ -18,7 +18,16 @@ export interface ISlashingProtection {
|
|
|
18
18
|
*/
|
|
19
19
|
hasAttestedInEpoch(pubKey: BLSPubkey, epoch: Epoch): Promise<boolean>;
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
/**
|
|
22
|
+
* Import an EIP-3076 interchange, rejects attestations with a target epoch more than one epoch after `currentEpoch`
|
|
23
|
+
* (or genesis if earlier)
|
|
24
|
+
*/
|
|
25
|
+
importInterchange(
|
|
26
|
+
interchange: Interchange,
|
|
27
|
+
genesisValidatorsRoot: Uint8Array | Root,
|
|
28
|
+
logger?: Logger,
|
|
29
|
+
currentEpoch?: Epoch
|
|
30
|
+
): Promise<void>;
|
|
22
31
|
exportInterchange(
|
|
23
32
|
genesisValidatorsRoot: Uint8Array | Root,
|
|
24
33
|
pubkeys: BLSPubkey[],
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {Epoch, Root, ssz} from "@lodestar/types";
|
|
2
2
|
import {fromHex, toHex, toRootHex} from "@lodestar/utils";
|
|
3
|
+
import {InterchangeError, InterchangeErrorErrorCode} from "./interchange/errors.js";
|
|
3
4
|
|
|
4
5
|
export const blsPubkeyLen = 48;
|
|
5
6
|
export const ZERO_ROOT = ssz.Root.defaultValue();
|
|
@@ -27,6 +28,17 @@ export function numToString(num: number): string {
|
|
|
27
28
|
return String(num);
|
|
28
29
|
}
|
|
29
30
|
|
|
31
|
+
/**
|
|
32
|
+
* Parse a decimal uint string, rejecting values the slashing protection DB range scans cannot see
|
|
33
|
+
*/
|
|
34
|
+
export function stringToNum(str: string): number {
|
|
35
|
+
const num = Number(str);
|
|
36
|
+
if (!/^[0-9]+$/.test(str) || num >= Number.MAX_SAFE_INTEGER) {
|
|
37
|
+
throw new InterchangeError({code: InterchangeErrorErrorCode.INVALID_VALUE, value: str});
|
|
38
|
+
}
|
|
39
|
+
return num;
|
|
40
|
+
}
|
|
41
|
+
|
|
30
42
|
export function minEpoch(epochs: Epoch[]): Epoch | null {
|
|
31
43
|
return epochs.length > 0 ? epochs.reduce((minEpoch, epoch) => (minEpoch < epoch ? minEpoch : epoch)) : null;
|
|
32
44
|
}
|