@lodestar/validator 1.49.0-dev.d4c0ee61ef → 1.49.0-dev.ee3c432d85

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.
@@ -3,7 +3,8 @@ import { LodestarError } from "@lodestar/utils";
3
3
  export declare enum InterchangeErrorErrorCode {
4
4
  UNSUPPORTED_FORMAT = "ERR_INTERCHANGE_UNSUPPORTED_FORMAT",
5
5
  UNSUPPORTED_VERSION = "ERR_INTERCHANGE_UNSUPPORTED_VERSION",
6
- GENESIS_VALIDATOR_MISMATCH = "ERR_INTERCHANGE_GENESIS_VALIDATOR_MISMATCH"
6
+ GENESIS_VALIDATOR_MISMATCH = "ERR_INTERCHANGE_GENESIS_VALIDATOR_MISMATCH",
7
+ INVALID_VALUE = "ERR_INTERCHANGE_INVALID_VALUE"
7
8
  }
8
9
  type InterchangeErrorErrorType = {
9
10
  code: InterchangeErrorErrorCode.UNSUPPORTED_FORMAT;
@@ -15,6 +16,9 @@ type InterchangeErrorErrorType = {
15
16
  code: InterchangeErrorErrorCode.GENESIS_VALIDATOR_MISMATCH;
16
17
  root: Root;
17
18
  expectedRoot: Root;
19
+ } | {
20
+ code: InterchangeErrorErrorCode.INVALID_VALUE;
21
+ value: string;
18
22
  };
19
23
  export declare class InterchangeError extends LodestarError<InterchangeErrorErrorType> {
20
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/slashingProtection/interchange/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAE9C,oBAAY,yBAAyB;IACnC,kBAAkB,uCAAuC;IACzD,mBAAmB,wCAAwC;IAC3D,0BAA0B,+CAA+C;CAC1E;AAED,KAAK,yBAAyB,GAC1B;IAAC,IAAI,EAAE,yBAAyB,CAAC,kBAAkB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,GACpE;IAAC,IAAI,EAAE,yBAAyB,CAAC,mBAAmB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,GACtE;IAAC,IAAI,EAAE,yBAAyB,CAAC,0BAA0B,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,YAAY,EAAE,IAAI,CAAA;CAAC,CAAC;AAEjG,qBAAa,gBAAiB,SAAQ,aAAa,CAAC,yBAAyB,CAAC;CAAG"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/slashingProtection/interchange/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAE9C,oBAAY,yBAAyB;IACnC,kBAAkB,uCAAuC;IACzD,mBAAmB,wCAAwC;IAC3D,0BAA0B,+CAA+C;IACzE,aAAa,kCAAkC;CAChD;AAED,KAAK,yBAAyB,GAC1B;IAAC,IAAI,EAAE,yBAAyB,CAAC,kBAAkB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,GACpE;IAAC,IAAI,EAAE,yBAAyB,CAAC,mBAAmB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,GACtE;IAAC,IAAI,EAAE,yBAAyB,CAAC,0BAA0B,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,YAAY,EAAE,IAAI,CAAA;CAAC,GAC5F;IAAC,IAAI,EAAE,yBAAyB,CAAC,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAAC;AAEnE,qBAAa,gBAAiB,SAAQ,aAAa,CAAC,yBAAyB,CAAC;CAAG"}
@@ -4,6 +4,7 @@ export var InterchangeErrorErrorCode;
4
4
  InterchangeErrorErrorCode["UNSUPPORTED_FORMAT"] = "ERR_INTERCHANGE_UNSUPPORTED_FORMAT";
5
5
  InterchangeErrorErrorCode["UNSUPPORTED_VERSION"] = "ERR_INTERCHANGE_UNSUPPORTED_VERSION";
6
6
  InterchangeErrorErrorCode["GENESIS_VALIDATOR_MISMATCH"] = "ERR_INTERCHANGE_GENESIS_VALIDATOR_MISMATCH";
7
+ InterchangeErrorErrorCode["INVALID_VALUE"] = "ERR_INTERCHANGE_INVALID_VALUE";
7
8
  })(InterchangeErrorErrorCode || (InterchangeErrorErrorCode = {}));
8
9
  export class InterchangeError extends LodestarError {
9
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/slashingProtection/interchange/errors.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAE9C,MAAM,CAAN,IAAY,yBAIX;AAJD,WAAY,yBAAyB;IACnC,sFAAyD,CAAA;IACzD,wFAA2D,CAAA;IAC3D,sGAAyE,CAAA;AAC3E,CAAC,EAJW,yBAAyB,KAAzB,yBAAyB,QAIpC;AAOD,MAAM,OAAO,gBAAiB,SAAQ,aAAwC;CAAG"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/slashingProtection/interchange/errors.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAE9C,MAAM,CAAN,IAAY,yBAKX;AALD,WAAY,yBAAyB;IACnC,sFAAyD,CAAA;IACzD,wFAA2D,CAAA;IAC3D,sGAAyE,CAAA;IACzE,4EAA+C,CAAA;AACjD,CAAC,EALW,yBAAyB,KAAzB,yBAAyB,QAKpC;AAQD,MAAM,OAAO,gBAAiB,SAAQ,aAAwC;CAAG"}
@@ -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: parseInt(block.slot, 10),
30
+ slot: stringToNum(block.slot),
31
31
  signingRoot: fromOptionalHexString(block.signing_root),
32
32
  })),
33
33
  signedAttestations: validator.signed_attestations.map((att) => ({
34
- sourceEpoch: parseInt(att.source_epoch, 10),
35
- targetEpoch: parseInt(att.target_epoch, 10),
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;AAkFvF,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,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC9B,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,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC;gBAC3C,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC;gBAC3C,WAAW,EAAE,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAC;aACrD,CAAC,CAAC;SACJ,CAAC,CAAC;KACJ,CAAC;AACJ,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: parseInt(block.slot, 10),
29
+ slot: stringToNum(block.slot),
30
30
  signingRoot: fromOptionalHexString(block.signing_root),
31
31
  })),
32
32
  signedAttestations: validator.signed_attestations.map((att) => ({
33
- sourceEpoch: parseInt(att.source_epoch, 10),
34
- targetEpoch: parseInt(att.target_epoch, 10),
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;AAiFvF,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,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC9B,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,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC;gBAC3C,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC;gBAC3C,WAAW,EAAE,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAC;aACrD,CAAC,CAAC;SACJ,CAAC,CAAC;KACJ,CAAC;AACJ,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"}
@@ -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;AAGjD,eAAO,MAAM,YAAY,KAAK,CAAC;AAC/B,eAAO,MAAM,SAAS,uDAA0B,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,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
+ {"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;AAE1D,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,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"}
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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lodestar/validator",
3
- "version": "1.49.0-dev.d4c0ee61ef",
3
+ "version": "1.49.0-dev.ee3c432d85",
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.d4c0ee61ef",
54
- "@lodestar/config": "^1.49.0-dev.d4c0ee61ef",
55
- "@lodestar/db": "^1.49.0-dev.d4c0ee61ef",
56
- "@lodestar/params": "^1.49.0-dev.d4c0ee61ef",
57
- "@lodestar/state-transition": "^1.49.0-dev.d4c0ee61ef",
58
- "@lodestar/types": "^1.49.0-dev.d4c0ee61ef",
59
- "@lodestar/utils": "^1.49.0-dev.d4c0ee61ef",
53
+ "@lodestar/api": "^1.49.0-dev.ee3c432d85",
54
+ "@lodestar/config": "^1.49.0-dev.ee3c432d85",
55
+ "@lodestar/db": "^1.49.0-dev.ee3c432d85",
56
+ "@lodestar/params": "^1.49.0-dev.ee3c432d85",
57
+ "@lodestar/state-transition": "^1.49.0-dev.ee3c432d85",
58
+ "@lodestar/types": "^1.49.0-dev.ee3c432d85",
59
+ "@lodestar/utils": "^1.49.0-dev.ee3c432d85",
60
60
  "strict-event-emitter-types": "^2.0.0"
61
61
  },
62
62
  "devDependencies": {
63
- "@lodestar/logger": "^1.49.0-dev.d4c0ee61ef",
64
- "@lodestar/spec-test-util": "^1.49.0-dev.d4c0ee61ef",
65
- "@lodestar/test-utils": "^1.49.0-dev.d4c0ee61ef",
63
+ "@lodestar/logger": "^1.49.0-dev.ee3c432d85",
64
+ "@lodestar/spec-test-util": "^1.49.0-dev.ee3c432d85",
65
+ "@lodestar/test-utils": "^1.49.0-dev.ee3c432d85",
66
66
  "@vekexasia/bigint-buffer2": "^1.1.1",
67
67
  "rimraf": "^4.4.1"
68
68
  },
69
- "gitHead": "2b85143520ae47a36abacdbc9668dc43327cd2d6"
69
+ "gitHead": "8dbcf2422471d60bf8784f70a337b129bd27e90f"
70
70
  }
@@ -5,11 +5,13 @@ 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",
8
9
  }
9
10
 
10
11
  type InterchangeErrorErrorType =
11
12
  | {code: InterchangeErrorErrorCode.UNSUPPORTED_FORMAT; format: string}
12
13
  | {code: InterchangeErrorErrorCode.UNSUPPORTED_VERSION; version: string}
13
- | {code: InterchangeErrorErrorCode.GENESIS_VALIDATOR_MISMATCH; root: Root; expectedRoot: Root};
14
+ | {code: InterchangeErrorErrorCode.GENESIS_VALIDATOR_MISMATCH; root: Root; expectedRoot: Root}
15
+ | {code: InterchangeErrorErrorCode.INVALID_VALUE; value: string};
14
16
 
15
17
  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: parseInt(block.slot, 10),
115
+ slot: stringToNum(block.slot),
116
116
  signingRoot: fromOptionalHexString(block.signing_root),
117
117
  })),
118
118
  signedAttestations: validator.signed_attestations.map((att) => ({
119
- sourceEpoch: parseInt(att.source_epoch, 10),
120
- targetEpoch: parseInt(att.target_epoch, 10),
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: parseInt(block.slot, 10),
110
+ slot: stringToNum(block.slot),
111
111
  signingRoot: fromOptionalHexString(block.signing_root),
112
112
  })),
113
113
  signedAttestations: validator.signed_attestations.map((att) => ({
114
- sourceEpoch: parseInt(att.source_epoch, 10),
115
- targetEpoch: parseInt(att.target_epoch, 10),
114
+ sourceEpoch: stringToNum(att.source_epoch),
115
+ targetEpoch: stringToNum(att.target_epoch),
116
116
  signingRoot: fromOptionalHexString(att.signing_root),
117
117
  })),
118
118
  })),
@@ -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
  }