@chainsafe/lodestar 1.9.0-dev.5b5530b393 → 1.9.0-dev.5d9d86d100
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/.git-data.json +1 -1
- package/lib/applyPreset.js +7 -1
- package/lib/applyPreset.js.map +1 -1
- package/lib/cli.js +1 -1
- package/lib/cli.js.map +1 -1
- package/lib/cmds/beacon/handler.d.ts +3 -3
- package/lib/cmds/beacon/handler.js +54 -15
- package/lib/cmds/beacon/handler.js.map +1 -1
- package/lib/cmds/beacon/initBeaconState.js +23 -9
- package/lib/cmds/beacon/initBeaconState.js.map +1 -1
- package/lib/cmds/beacon/options.d.ts +7 -6
- package/lib/cmds/beacon/options.js +19 -8
- package/lib/cmds/beacon/options.js.map +1 -1
- package/lib/cmds/dev/options.d.ts +10 -6
- package/lib/cmds/lightclient/handler.js +8 -2
- package/lib/cmds/lightclient/handler.js.map +1 -1
- package/lib/cmds/lightclient/options.d.ts +4 -3
- package/lib/cmds/lightclient/options.js +0 -2
- package/lib/cmds/lightclient/options.js.map +1 -1
- package/lib/cmds/validator/blsToExecutionChange.d.ts +3 -3
- package/lib/cmds/validator/blsToExecutionChange.js +12 -5
- package/lib/cmds/validator/blsToExecutionChange.js.map +1 -1
- package/lib/cmds/validator/handler.js +24 -24
- package/lib/cmds/validator/handler.js.map +1 -1
- package/lib/cmds/validator/keymanager/decryptKeystoreDefinitions.d.ts +16 -0
- package/lib/cmds/validator/keymanager/decryptKeystoreDefinitions.js +108 -0
- package/lib/cmds/validator/keymanager/decryptKeystoreDefinitions.js.map +1 -0
- package/lib/cmds/validator/keymanager/decryptKeystores/index.d.ts +2 -0
- package/lib/cmds/validator/keymanager/decryptKeystores/index.js +2 -0
- package/lib/cmds/validator/keymanager/decryptKeystores/index.js.map +1 -0
- package/lib/cmds/validator/keymanager/decryptKeystores/poolSize.d.ts +6 -0
- package/lib/cmds/validator/keymanager/decryptKeystores/poolSize.js +19 -0
- package/lib/cmds/validator/keymanager/decryptKeystores/poolSize.js.map +1 -0
- package/lib/cmds/validator/keymanager/decryptKeystores/threadPool.d.ts +25 -0
- package/lib/cmds/validator/keymanager/decryptKeystores/threadPool.js +53 -0
- package/lib/cmds/validator/keymanager/decryptKeystores/threadPool.js.map +1 -0
- package/lib/cmds/validator/keymanager/decryptKeystores/types.d.ts +11 -0
- package/lib/cmds/validator/keymanager/decryptKeystores/types.js +4 -0
- package/lib/cmds/validator/keymanager/decryptKeystores/types.js.map +1 -0
- package/lib/cmds/validator/keymanager/decryptKeystores/worker.d.ts +9 -0
- package/lib/cmds/validator/keymanager/{decryptKeystoreDefinitions → decryptKeystores}/worker.js +6 -5
- package/lib/cmds/validator/keymanager/decryptKeystores/worker.js.map +1 -0
- package/lib/cmds/validator/keymanager/impl.d.ts +2 -1
- package/lib/cmds/validator/keymanager/impl.js +23 -16
- package/lib/cmds/validator/keymanager/impl.js.map +1 -1
- package/lib/cmds/validator/keymanager/keystoreCache.js +2 -1
- package/lib/cmds/validator/keymanager/keystoreCache.js.map +1 -1
- package/lib/cmds/validator/options.d.ts +5 -3
- package/lib/cmds/validator/options.js +6 -1
- package/lib/cmds/validator/options.js.map +1 -1
- package/lib/cmds/validator/signers/importExternalKeystores.js +0 -2
- package/lib/cmds/validator/signers/importExternalKeystores.js.map +1 -1
- package/lib/cmds/validator/signers/index.d.ts +2 -2
- package/lib/cmds/validator/signers/index.js +3 -1
- package/lib/cmds/validator/signers/index.js.map +1 -1
- package/lib/cmds/validator/signers/logSigners.d.ts +2 -2
- package/lib/cmds/validator/signers/logSigners.js.map +1 -1
- package/lib/cmds/validator/slashingProtection/export.d.ts +3 -2
- package/lib/cmds/validator/slashingProtection/export.js +47 -14
- package/lib/cmds/validator/slashingProtection/export.js.map +1 -1
- package/lib/cmds/validator/slashingProtection/import.d.ts +2 -2
- package/lib/cmds/validator/slashingProtection/import.js +11 -6
- package/lib/cmds/validator/slashingProtection/import.js.map +1 -1
- package/lib/cmds/validator/slashingProtection/utils.d.ts +2 -2
- package/lib/cmds/validator/slashingProtection/utils.js +4 -8
- package/lib/cmds/validator/slashingProtection/utils.js.map +1 -1
- package/lib/cmds/validator/voluntaryExit.js +1 -1
- package/lib/cmds/validator/voluntaryExit.js.map +1 -1
- package/lib/options/beaconNodeOptions/api.d.ts +6 -5
- package/lib/options/beaconNodeOptions/api.js +8 -2
- package/lib/options/beaconNodeOptions/api.js.map +1 -1
- package/lib/options/beaconNodeOptions/builder.d.ts +4 -5
- package/lib/options/beaconNodeOptions/builder.js +10 -14
- package/lib/options/beaconNodeOptions/builder.js.map +1 -1
- package/lib/options/beaconNodeOptions/chain.d.ts +13 -12
- package/lib/options/beaconNodeOptions/chain.js +12 -2
- package/lib/options/beaconNodeOptions/chain.js.map +1 -1
- package/lib/options/beaconNodeOptions/eth1.d.ts +6 -6
- package/lib/options/beaconNodeOptions/eth1.js +6 -1
- package/lib/options/beaconNodeOptions/eth1.js.map +1 -1
- package/lib/options/beaconNodeOptions/execution.d.ts +1 -1
- package/lib/options/beaconNodeOptions/execution.js +9 -5
- package/lib/options/beaconNodeOptions/execution.js.map +1 -1
- package/lib/options/beaconNodeOptions/index.d.ts +15 -12
- package/lib/options/beaconNodeOptions/metrics.d.ts +1 -1
- package/lib/options/beaconNodeOptions/metrics.js +2 -2
- package/lib/options/beaconNodeOptions/metrics.js.map +1 -1
- package/lib/options/beaconNodeOptions/monitoring.d.ts +5 -5
- package/lib/options/beaconNodeOptions/network.d.ts +19 -17
- package/lib/options/beaconNodeOptions/network.js +27 -10
- package/lib/options/beaconNodeOptions/network.js.map +1 -1
- package/lib/options/beaconNodeOptions/sync.d.ts +4 -4
- package/lib/options/beaconNodeOptions/sync.js +2 -1
- package/lib/options/beaconNodeOptions/sync.js.map +1 -1
- package/lib/options/globalOptions.d.ts +2 -2
- package/lib/options/logOptions.d.ts +11 -1
- package/lib/options/logOptions.js +7 -6
- package/lib/options/logOptions.js.map +1 -1
- package/lib/util/command.d.ts +2 -1
- package/lib/util/command.js.map +1 -1
- package/lib/util/file.js.map +1 -1
- package/lib/util/index.d.ts +1 -0
- package/lib/util/index.js +1 -0
- package/lib/util/index.js.map +1 -1
- package/lib/util/logger.d.ts +7 -23
- package/lib/util/logger.js +53 -80
- package/lib/util/logger.js.map +1 -1
- package/lib/util/pruneOldFilesInDir.d.ts +2 -0
- package/lib/util/pruneOldFilesInDir.js +17 -0
- package/lib/util/pruneOldFilesInDir.js.map +1 -0
- package/package.json +16 -15
- package/lib/cmds/validator/keymanager/decryptKeystoreDefinitions/index.d.ts +0 -8
- package/lib/cmds/validator/keymanager/decryptKeystoreDefinitions/index.js +0 -92
- package/lib/cmds/validator/keymanager/decryptKeystoreDefinitions/index.js.map +0 -1
- package/lib/cmds/validator/keymanager/decryptKeystoreDefinitions/poolSize.d.ts +0 -6
- package/lib/cmds/validator/keymanager/decryptKeystoreDefinitions/poolSize.js +0 -19
- package/lib/cmds/validator/keymanager/decryptKeystoreDefinitions/poolSize.js.map +0 -1
- package/lib/cmds/validator/keymanager/decryptKeystoreDefinitions/types.d.ts +0 -12
- package/lib/cmds/validator/keymanager/decryptKeystoreDefinitions/types.js +0 -2
- package/lib/cmds/validator/keymanager/decryptKeystoreDefinitions/types.js.map +0 -1
- package/lib/cmds/validator/keymanager/decryptKeystoreDefinitions/worker.d.ts +0 -9
- package/lib/cmds/validator/keymanager/decryptKeystoreDefinitions/worker.js.map +0 -1
- package/lib/util/loggerConsoleTransport.d.ts +0 -24
- package/lib/util/loggerConsoleTransport.js +0 -35
- package/lib/util/loggerConsoleTransport.js.map +0 -1
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { defaultOptions } from "@lodestar/beacon-node";
|
|
2
2
|
export function parseArgs(args) {
|
|
3
|
+
var _a;
|
|
3
4
|
return {
|
|
4
5
|
isSingleNode: args["sync.isSingleNode"],
|
|
5
6
|
disableProcessAsChainSegment: args["sync.disableProcessAsChainSegment"],
|
|
6
|
-
backfillBatchSize: args["sync.backfillBatchSize"],
|
|
7
|
+
backfillBatchSize: (_a = args["sync.backfillBatchSize"]) !== null && _a !== void 0 ? _a : defaultOptions.sync.backfillBatchSize,
|
|
7
8
|
disableRangeSync: args["sync.disableRangeSync"],
|
|
8
9
|
};
|
|
9
10
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/options/beaconNodeOptions/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAqB,MAAM,uBAAuB,CAAC;AAUzE,MAAM,UAAU,SAAS,CAAC,IAAc
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/options/beaconNodeOptions/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAqB,MAAM,uBAAuB,CAAC;AAUzE,MAAM,UAAU,SAAS,CAAC,IAAc;;IACtC,OAAO;QACL,YAAY,EAAE,IAAI,CAAC,mBAAmB,CAAC;QACvC,4BAA4B,EAAE,IAAI,CAAC,mCAAmC,CAAC;QACvE,iBAAiB,EAAE,MAAA,IAAI,CAAC,wBAAwB,CAAC,mCAAI,cAAc,CAAC,IAAI,CAAC,iBAAiB;QAC1F,gBAAgB,EAAE,IAAI,CAAC,uBAAuB,CAAC;KAChD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAgC;IAClD,mBAAmB,EAAE;QACnB,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,SAAS;QACf,WAAW,EACT;sFACgF;QAClF,kBAAkB,EAAE,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC;QAC5D,KAAK,EAAE,MAAM;KACd;IAED,uBAAuB,EAAE;QACvB,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,8EAA8E;QAC3F,kBAAkB,EAAE,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAChE,KAAK,EAAE,MAAM;KACd;IAED,mCAAmC,EAAE;QACnC,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,SAAS;QACf,WAAW,EACT,2GAA2G;QAC7G,kBAAkB,EAAE,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,4BAA4B,CAAC;QAC5E,KAAK,EAAE,MAAM;KACd;IAED,wBAAwB,EAAE;QACxB,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,2FAA2F;QACxG,kBAAkB,EAAE,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC;QACjE,KAAK,EAAE,MAAM;KACd;CACF,CAAC"}
|
|
@@ -4,7 +4,7 @@ import { IParamsArgs } from "./paramsOptions.js";
|
|
|
4
4
|
type GlobalSingleArgs = {
|
|
5
5
|
dataDir?: string;
|
|
6
6
|
network?: NetworkName;
|
|
7
|
-
paramsFile
|
|
7
|
+
paramsFile?: string;
|
|
8
8
|
preset: string;
|
|
9
9
|
presetFile?: string;
|
|
10
10
|
};
|
|
@@ -18,7 +18,7 @@ export declare const globalOptions: {
|
|
|
18
18
|
dataDir: import("yargs").Options;
|
|
19
19
|
network: import("yargs").Options;
|
|
20
20
|
paramsFile: import("yargs").Options;
|
|
21
|
-
preset: import("yargs").Options
|
|
21
|
+
preset: import("yargs").Options & Required<Pick<import("yargs").Options, "default">>;
|
|
22
22
|
presetFile: import("yargs").Options;
|
|
23
23
|
};
|
|
24
24
|
export {};
|
|
@@ -1,4 +1,14 @@
|
|
|
1
|
+
import { LogLevel } from "@lodestar/logger";
|
|
1
2
|
import { CliCommandOptions } from "../util/command.js";
|
|
2
|
-
|
|
3
|
+
export type LogArgs = {
|
|
4
|
+
logLevel: LogLevel;
|
|
5
|
+
logFile?: string;
|
|
6
|
+
logFileLevel: LogLevel;
|
|
7
|
+
logFileDailyRotate: number;
|
|
8
|
+
logFormatGenesisTime?: number;
|
|
9
|
+
logPrefix?: string;
|
|
10
|
+
logFormat?: string;
|
|
11
|
+
logLevelModule?: string[];
|
|
12
|
+
};
|
|
3
13
|
export declare const logOptions: CliCommandOptions<LogArgs>;
|
|
4
14
|
//# sourceMappingURL=logOptions.d.ts.map
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { LogLevels } from "@lodestar/utils";
|
|
2
|
+
import { LogLevel, logFormats } from "@lodestar/logger";
|
|
3
|
+
import { LOG_FILE_DISABLE_KEYWORD } from "../util/logger.js";
|
|
3
4
|
export const logOptions = {
|
|
4
5
|
logLevel: {
|
|
5
6
|
choices: LogLevels,
|
|
6
7
|
description: "Logging verbosity level for emittings logs to terminal",
|
|
7
|
-
default:
|
|
8
|
+
default: LogLevel.info,
|
|
8
9
|
type: "string",
|
|
9
10
|
},
|
|
10
11
|
logFile: {
|
|
@@ -14,12 +15,12 @@ export const logOptions = {
|
|
|
14
15
|
logFileLevel: {
|
|
15
16
|
choices: LogLevels,
|
|
16
17
|
description: "Logging verbosity level for emittings logs to file",
|
|
17
|
-
default:
|
|
18
|
+
default: LogLevel.debug,
|
|
18
19
|
type: "string",
|
|
19
20
|
},
|
|
20
21
|
logFileDailyRotate: {
|
|
21
|
-
description: "Daily rotate log files, set to an integer to limit the file count, set to 0(zero) to disable rotation",
|
|
22
|
-
default:
|
|
22
|
+
description: "Daily rotate log files, set to an integer to limit the file count, set to 0 (zero) to disable rotation",
|
|
23
|
+
default: 5,
|
|
23
24
|
type: "number",
|
|
24
25
|
},
|
|
25
26
|
logFormatGenesisTime: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logOptions.js","sourceRoot":"","sources":["../../src/options/logOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"logOptions.js","sourceRoot":"","sources":["../../src/options/logOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAC,QAAQ,EAAE,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAAC,wBAAwB,EAAC,MAAM,mBAAmB,CAAC;AAa3D,MAAM,CAAC,MAAM,UAAU,GAA+B;IACpD,QAAQ,EAAE;QACR,OAAO,EAAE,SAAS;QAClB,WAAW,EAAE,wDAAwD;QACrE,OAAO,EAAE,QAAQ,CAAC,IAAI;QACtB,IAAI,EAAE,QAAQ;KACf;IAED,OAAO,EAAE;QACP,WAAW,EAAE,0DAA0D,wBAAwB,cAAc;QAC7G,IAAI,EAAE,QAAQ;KACf;IAED,YAAY,EAAE;QACZ,OAAO,EAAE,SAAS;QAClB,WAAW,EAAE,oDAAoD;QACjE,OAAO,EAAE,QAAQ,CAAC,KAAK;QACvB,IAAI,EAAE,QAAQ;KACf;IAED,kBAAkB,EAAE;QAClB,WAAW,EACT,wGAAwG;QAC1G,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,QAAQ;KACf;IAED,oBAAoB,EAAE;QACpB,MAAM,EAAE,IAAI;QACZ,WAAW,EACT,kHAAkH;QACpH,IAAI,EAAE,QAAQ;KACf;IAED,SAAS,EAAE;QACT,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,6CAA6C;QAC1D,IAAI,EAAE,QAAQ;KACf;IAED,SAAS,EAAE;QACT,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,kEAAkE;QAC/E,OAAO,EAAE,UAAU;QACnB,IAAI,EAAE,QAAQ;KACf;IAED,cAAc,EAAE;QACd,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,2FAA2F;QACxG,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,CAAC,IAAc,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;KACxE;CACF,CAAC"}
|
package/lib/util/command.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Options, Argv } from "yargs";
|
|
2
2
|
export type CliCommandOptions<OwnArgs> = Required<{
|
|
3
|
-
[
|
|
3
|
+
[K in keyof OwnArgs]: undefined extends OwnArgs[K] ? Options : // If arg cannot be undefined it must specify a default value
|
|
4
|
+
Options & Required<Pick<Options, "default">>;
|
|
4
5
|
}>;
|
|
5
6
|
export interface CliCommand<OwnArgs = Record<never, never>, ParentArgs = Record<never, never>, R = any> {
|
|
6
7
|
command: string;
|
package/lib/util/command.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/util/command.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/util/command.ts"],"names":[],"mappings":"AAsBA;;;;GAIG;AACH,8DAA8D;AAC9D,MAAM,UAAU,sBAAsB,CAAC,KAAW,EAAE,UAAgC;IAClF,KAAK,CAAC,OAAO,CAAC;QACZ,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,OAAO,EAAE,CAAC,YAAY,EAAE,EAAE;YACxB,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YAC/C,KAAK,MAAM,UAAU,IAAI,UAAU,CAAC,WAAW,IAAI,EAAE,EAAE;gBACrD,sBAAsB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;aAClD;YACD,IAAI,UAAU,CAAC,QAAQ,EAAE;gBACvB,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE;oBACzC,YAAY,CAAC,OAAO,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;iBACpE;aACF;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,gEAAgE;QAChE,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI,SAAS,YAAY,KAAU,CAAC;KAChE,CAAC,CAAC;AACL,CAAC"}
|
package/lib/util/file.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/util/file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAC,SAAS,EAAC,MAAM,WAAW,CAAC;AACpC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,MAAM,EAAC,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAC,GAAG,IAAI,CAAC;AAEjD,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAC;AAE9B,MAAM,CAAC,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC;IAC/C,QAAQ,EAAE;QACR,IAAI,IAAI,CAAC,uBAAuB,EAAE;YAChC,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,SAAS,SAAS,CAAC,IAAI;gBAChC,+DAA+D;gBAC/D,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACnC,CAAC;SACF,CAAC;KACH;CACF,CAAC,CAAC;AAEH,MAAM,CAAN,IAAY,UAKX;AALD,WAAY,UAAU;IACpB,2BAAa,CAAA;IACb,2BAAa,CAAA;IACb,yBAAW,CAAA;IACX,2BAAa,CAAA;AACf,CAAC,EALW,UAAU,KAAV,UAAU,QAKrB;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAI,QAAgB,EAAE,UAAsB;IAC/D,QAAQ,UAAU,EAAE;QAClB,KAAK,UAAU,CAAC,IAAI;YAClB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAM,CAAC;QACnC,KAAK,UAAU,CAAC,IAAI,CAAC;QACrB,KAAK,UAAU,CAAC,GAAG;YACjB,OAAO,IAAI,CAAC,QAAQ,EAAE,EAAC,MAAM,EAAE,UAAU,EAAC,CAAM,CAAC;QACnD;YACE,OAAO,QAAwB,CAAC;KACnC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,GAAY,EAAE,UAAsB;IAC5D,IAAI,QAAgB,CAAC;IACrB,QAAQ,UAAU,EAAE;QAClB,KAAK,UAAU,CAAC,IAAI;YAClB,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACxC,MAAM;QACR,KAAK,UAAU,CAAC,IAAI,CAAC;QACrB,KAAK,UAAU,CAAC,GAAG;YACjB,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,MAAM,EAAE,UAAU,EAAC,CAAC,CAAC;YAC3C,MAAM;QACR;YACE,QAAQ,GAAG,
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/util/file.ts"],"names":[],"mappings":"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"}
|
package/lib/util/index.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export * from "./logger.js";
|
|
|
10
10
|
export * from "./object.js";
|
|
11
11
|
export * from "./passphrase.js";
|
|
12
12
|
export * from "./process.js";
|
|
13
|
+
export * from "./pruneOldFilesInDir.js";
|
|
13
14
|
export * from "./sleep.js";
|
|
14
15
|
export * from "./stripOffNewlines.js";
|
|
15
16
|
export * from "./types.js";
|
package/lib/util/index.js
CHANGED
|
@@ -10,6 +10,7 @@ export * from "./logger.js";
|
|
|
10
10
|
export * from "./object.js";
|
|
11
11
|
export * from "./passphrase.js";
|
|
12
12
|
export * from "./process.js";
|
|
13
|
+
export * from "./pruneOldFilesInDir.js";
|
|
13
14
|
export * from "./sleep.js";
|
|
14
15
|
export * from "./stripOffNewlines.js";
|
|
15
16
|
export * from "./types.js";
|
package/lib/util/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,yBAAyB,CAAC;AACxC,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC"}
|
package/lib/util/logger.d.ts
CHANGED
|
@@ -1,39 +1,23 @@
|
|
|
1
1
|
import { ChainForkConfig } from "@lodestar/config";
|
|
2
|
-
import {
|
|
2
|
+
import { LoggerNodeOpts } from "@lodestar/logger/node";
|
|
3
|
+
import { LogArgs } from "../options/logOptions.js";
|
|
3
4
|
import { GlobalArgs } from "../options/globalOptions.js";
|
|
4
5
|
export declare const LOG_FILE_DISABLE_KEYWORD = "none";
|
|
5
|
-
export declare const LOG_LEVEL_DEFAULT = LogLevel.info;
|
|
6
|
-
export declare const LOG_FILE_LEVEL_DEFAULT = LogLevel.debug;
|
|
7
|
-
export declare const LOG_DAILY_ROTATE_DEFAULT = 5;
|
|
8
|
-
export type LogArgs = {
|
|
9
|
-
logLevel?: LogLevel;
|
|
10
|
-
logFile?: string;
|
|
11
|
-
logFileLevel?: LogLevel;
|
|
12
|
-
logFileDailyRotate?: number;
|
|
13
|
-
logFormatGenesisTime?: number;
|
|
14
|
-
logPrefix?: string;
|
|
15
|
-
logFormat?: string;
|
|
16
|
-
logLevelModule?: string[];
|
|
17
|
-
};
|
|
18
6
|
/**
|
|
19
7
|
* Setup a CLI logger, common for beacon, validator and dev commands
|
|
20
8
|
*/
|
|
21
|
-
export declare function
|
|
9
|
+
export declare function parseLoggerArgs(args: LogArgs & Pick<GlobalArgs, "dataDir">, paths: {
|
|
22
10
|
defaultLogFilepath: string;
|
|
23
11
|
}, config: ChainForkConfig, opts?: {
|
|
24
12
|
hideTimestamp?: boolean;
|
|
25
|
-
}):
|
|
26
|
-
logger: Logger;
|
|
27
|
-
logParams: {
|
|
28
|
-
filename: string;
|
|
29
|
-
rotateMaxFiles: number;
|
|
30
|
-
};
|
|
31
|
-
};
|
|
13
|
+
}): LoggerNodeOpts;
|
|
32
14
|
/**
|
|
33
15
|
* Winston is not able to clean old log files if server is offline for a while
|
|
34
16
|
* so we have to do this manually when starting the node.
|
|
35
17
|
* See https://github.com/ChainSafe/lodestar/issues/4419
|
|
36
18
|
*/
|
|
37
|
-
export declare function cleanOldLogFiles(
|
|
19
|
+
export declare function cleanOldLogFiles(args: LogArgs, paths: {
|
|
20
|
+
defaultLogFilepath: string;
|
|
21
|
+
}): void;
|
|
38
22
|
export declare function shouldDeleteLogFile(prefix: string, extension: string, logFileName: string, maxFiles: number): boolean;
|
|
39
23
|
//# sourceMappingURL=logger.d.ts.map
|
package/lib/util/logger.js
CHANGED
|
@@ -1,91 +1,70 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import fs from "node:fs";
|
|
3
|
-
import DailyRotateFile from "winston-daily-rotate-file";
|
|
4
|
-
import winston from "winston";
|
|
5
3
|
import { SLOTS_PER_EPOCH } from "@lodestar/params";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
4
|
+
import { TimestampFormatCode, logFormats } from "@lodestar/logger";
|
|
5
|
+
import { LogLevel } from "@lodestar/utils";
|
|
8
6
|
export const LOG_FILE_DISABLE_KEYWORD = "none";
|
|
9
|
-
export const LOG_LEVEL_DEFAULT = LogLevel.info;
|
|
10
|
-
export const LOG_FILE_LEVEL_DEFAULT = LogLevel.debug;
|
|
11
|
-
export const LOG_DAILY_ROTATE_DEFAULT = 5;
|
|
12
|
-
const DATE_PATTERN = "YYYY-MM-DD";
|
|
13
7
|
/**
|
|
14
8
|
* Setup a CLI logger, common for beacon, validator and dev commands
|
|
15
9
|
*/
|
|
16
|
-
export function
|
|
17
|
-
var _a
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
10
|
+
export function parseLoggerArgs(args, paths, config, opts) {
|
|
11
|
+
var _a;
|
|
12
|
+
return {
|
|
13
|
+
level: parseLogLevel(args.logLevel),
|
|
14
|
+
file: args.logFile === LOG_FILE_DISABLE_KEYWORD
|
|
15
|
+
? undefined
|
|
16
|
+
: {
|
|
17
|
+
filepath: (_a = args.logFile) !== null && _a !== void 0 ? _a : paths.defaultLogFilepath,
|
|
18
|
+
level: parseLogLevel(args.logFileLevel),
|
|
19
|
+
dailyRotate: args.logFileDailyRotate,
|
|
20
|
+
},
|
|
21
|
+
module: args.logPrefix,
|
|
22
|
+
format: args.logFormat ? parseLogFormat(args.logFormat) : undefined,
|
|
23
|
+
levelModule: args.logLevelModule && parseLogLevelModule(args.logLevelModule),
|
|
24
|
+
timestampFormat: (opts === null || opts === void 0 ? void 0 : opts.hideTimestamp)
|
|
25
|
+
? { format: TimestampFormatCode.Hidden }
|
|
26
|
+
: args.logFormatGenesisTime !== undefined
|
|
27
|
+
? {
|
|
28
|
+
format: TimestampFormatCode.EpochSlot,
|
|
29
|
+
genesisTime: args.logFormatGenesisTime,
|
|
30
|
+
secondsPerSlot: config.SECONDS_PER_SLOT,
|
|
31
|
+
slotsPerEpoch: SLOTS_PER_EPOCH,
|
|
32
|
+
}
|
|
33
|
+
: {
|
|
34
|
+
format: TimestampFormatCode.DateRegular,
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function parseLogFormat(format) {
|
|
39
|
+
if (!logFormats.includes(format)) {
|
|
40
|
+
throw Error(`Unknown log format ${format}`);
|
|
33
41
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
// }
|
|
40
|
-
// `lodestar --logFileDailyRotate` -> enabled daily rotate with default value
|
|
41
|
-
// `lodestar --logFileDailyRotate 10` -> set daily rotate to custom value 10
|
|
42
|
-
// `lodestar --logFileDailyRotate 0` -> disable daily rotate and accumulate in same file
|
|
43
|
-
const rotateMaxFiles = (_c = args.logFileDailyRotate) !== null && _c !== void 0 ? _c : LOG_DAILY_ROTATE_DEFAULT;
|
|
44
|
-
const filename = (_d = args.logFile) !== null && _d !== void 0 ? _d : paths.defaultLogFilepath;
|
|
45
|
-
if (args.logFile !== LOG_FILE_DISABLE_KEYWORD) {
|
|
46
|
-
const logFileLevel = (_e = args.logFileLevel) !== null && _e !== void 0 ? _e : LOG_FILE_LEVEL_DEFAULT;
|
|
47
|
-
transports.push(rotateMaxFiles > 0
|
|
48
|
-
? new DailyRotateFile({
|
|
49
|
-
level: logFileLevel,
|
|
50
|
-
//insert the date pattern in filename before the file extension.
|
|
51
|
-
filename: filename.replace(/\.(?=[^.]*$)|$/, "-%DATE%$&"),
|
|
52
|
-
datePattern: DATE_PATTERN,
|
|
53
|
-
handleExceptions: true,
|
|
54
|
-
maxFiles: rotateMaxFiles,
|
|
55
|
-
auditFile: path.join(path.dirname(filename), ".log_rotate_audit.json"),
|
|
56
|
-
})
|
|
57
|
-
: new winston.transports.File({
|
|
58
|
-
level: logFileLevel,
|
|
59
|
-
filename: filename,
|
|
60
|
-
handleExceptions: true,
|
|
61
|
-
}));
|
|
42
|
+
return format;
|
|
43
|
+
}
|
|
44
|
+
function parseLogLevel(level) {
|
|
45
|
+
if (LogLevel[level] === undefined) {
|
|
46
|
+
throw Error(`Unknown log level '${level}'`);
|
|
62
47
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
};
|
|
73
|
-
const logger = createWinstonLogger({
|
|
74
|
-
module: args.logPrefix,
|
|
75
|
-
format: args.logFormat ? parseLogFormat(args.logFormat) : "human",
|
|
76
|
-
timestampFormat,
|
|
77
|
-
hideTimestamp: opts === null || opts === void 0 ? void 0 : opts.hideTimestamp,
|
|
78
|
-
}, transports);
|
|
79
|
-
return { logger, logParams: { filename, rotateMaxFiles } };
|
|
48
|
+
return level;
|
|
49
|
+
}
|
|
50
|
+
function parseLogLevelModule(logLevelModuleArr) {
|
|
51
|
+
const levelModule = {};
|
|
52
|
+
for (const logLevelModule of logLevelModuleArr) {
|
|
53
|
+
const [module, levelStr] = logLevelModule.split("=");
|
|
54
|
+
levelModule[module] = parseLogLevel(levelStr);
|
|
55
|
+
}
|
|
56
|
+
return levelModule;
|
|
80
57
|
}
|
|
81
58
|
/**
|
|
82
59
|
* Winston is not able to clean old log files if server is offline for a while
|
|
83
60
|
* so we have to do this manually when starting the node.
|
|
84
61
|
* See https://github.com/ChainSafe/lodestar/issues/4419
|
|
85
62
|
*/
|
|
86
|
-
export function cleanOldLogFiles(
|
|
87
|
-
|
|
88
|
-
const
|
|
63
|
+
export function cleanOldLogFiles(args, paths) {
|
|
64
|
+
var _a;
|
|
65
|
+
const filepath = (_a = args.logFile) !== null && _a !== void 0 ? _a : paths.defaultLogFilepath;
|
|
66
|
+
const folder = path.dirname(filepath);
|
|
67
|
+
const filename = path.basename(filepath);
|
|
89
68
|
const lastIndexDot = filename.lastIndexOf(".");
|
|
90
69
|
const prefix = filename.substring(0, lastIndexDot);
|
|
91
70
|
const extension = filename.substring(lastIndexDot + 1, filename.length);
|
|
@@ -93,7 +72,7 @@ export function cleanOldLogFiles(filePath, maxFiles) {
|
|
|
93
72
|
.readdirSync(folder, { withFileTypes: true })
|
|
94
73
|
.filter((de) => de.isFile())
|
|
95
74
|
.map((de) => de.name)
|
|
96
|
-
.filter((logFileName) => shouldDeleteLogFile(prefix, extension, logFileName,
|
|
75
|
+
.filter((logFileName) => shouldDeleteLogFile(prefix, extension, logFileName, args.logFileDailyRotate))
|
|
97
76
|
.map((logFileName) => path.join(folder, logFileName));
|
|
98
77
|
// delete files
|
|
99
78
|
toDelete.forEach((filename) => fs.unlinkSync(filename));
|
|
@@ -107,10 +86,4 @@ export function shouldDeleteLogFile(prefix, extension, logFileName, maxFiles) {
|
|
|
107
86
|
}
|
|
108
87
|
return false;
|
|
109
88
|
}
|
|
110
|
-
function parseLogFormat(format) {
|
|
111
|
-
if (!logFormats.includes(format)) {
|
|
112
|
-
throw Error(`Invalid log format '${format}'`);
|
|
113
|
-
}
|
|
114
|
-
return format;
|
|
115
|
-
}
|
|
116
89
|
//# sourceMappingURL=logger.js.map
|
package/lib/util/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/util/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/util/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
export function pruneOldFilesInDir(dirpath, maxAgeMs) {
|
|
4
|
+
for (const entryName of fs.readdirSync(dirpath)) {
|
|
5
|
+
const entryPath = path.join(dirpath, entryName);
|
|
6
|
+
const stat = fs.statSync(entryPath);
|
|
7
|
+
if (stat.isDirectory()) {
|
|
8
|
+
pruneOldFilesInDir(entryPath, maxAgeMs);
|
|
9
|
+
}
|
|
10
|
+
else if (stat.isFile()) {
|
|
11
|
+
if (Date.now() - stat.mtimeMs > maxAgeMs) {
|
|
12
|
+
fs.unlinkSync(entryPath);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=pruneOldFilesInDir.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pruneOldFilesInDir.js","sourceRoot":"","sources":["../../src/util/pruneOldFilesInDir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,QAAgB;IAClE,KAAK,MAAM,SAAS,IAAI,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAEhD,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;YACtB,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;SACzC;aAAM,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;YACxB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,QAAQ,EAAE;gBACxC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;aAC1B;SACF;KACF;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chainsafe/lodestar",
|
|
3
|
-
"version": "1.9.0-dev.
|
|
3
|
+
"version": "1.9.0-dev.5d9d86d100",
|
|
4
4
|
"description": "Command line interface for lodestar",
|
|
5
5
|
"author": "ChainSafe Systems",
|
|
6
6
|
"license": "LGPL-3.0",
|
|
@@ -23,8 +23,7 @@
|
|
|
23
23
|
"clean": "rm -rf lib && rm -f *.tsbuildinfo",
|
|
24
24
|
"build": "tsc -p tsconfig.build.json && yarn write-git-data",
|
|
25
25
|
"build:release": "yarn clean && yarn run build",
|
|
26
|
-
"build:
|
|
27
|
-
"build:types:watch": "yarn run build:types --watch",
|
|
26
|
+
"build:watch": "tsc -p tsconfig.build.json --watch",
|
|
28
27
|
"build:refdocs": "ts-node --esm ./docsgen/index.ts docs/cli.md",
|
|
29
28
|
"write-git-data": "node lib/util/gitData/writeGitData.js",
|
|
30
29
|
"check-build": "node -e \"(async function() { await import('./lib/index.js') })()\" lodestar --help",
|
|
@@ -57,20 +56,21 @@
|
|
|
57
56
|
"@chainsafe/bls": "7.1.1",
|
|
58
57
|
"@chainsafe/bls-keygen": "^0.3.0",
|
|
59
58
|
"@chainsafe/bls-keystore": "^2.0.0",
|
|
60
|
-
"@chainsafe/blst": "^0.2.
|
|
59
|
+
"@chainsafe/blst": "^0.2.9",
|
|
61
60
|
"@chainsafe/discv5": "^3.0.0",
|
|
62
61
|
"@chainsafe/ssz": "^0.10.2",
|
|
63
62
|
"@libp2p/peer-id-factory": "^2.0.3",
|
|
64
|
-
"@lodestar/api": "1.9.0-dev.
|
|
65
|
-
"@lodestar/beacon-node": "1.9.0-dev.
|
|
66
|
-
"@lodestar/config": "1.9.0-dev.
|
|
67
|
-
"@lodestar/db": "1.9.0-dev.
|
|
68
|
-
"@lodestar/light-client": "1.9.0-dev.
|
|
69
|
-
"@lodestar/
|
|
70
|
-
"@lodestar/
|
|
71
|
-
"@lodestar/
|
|
72
|
-
"@lodestar/
|
|
73
|
-
"@lodestar/
|
|
63
|
+
"@lodestar/api": "1.9.0-dev.5d9d86d100",
|
|
64
|
+
"@lodestar/beacon-node": "1.9.0-dev.5d9d86d100",
|
|
65
|
+
"@lodestar/config": "1.9.0-dev.5d9d86d100",
|
|
66
|
+
"@lodestar/db": "1.9.0-dev.5d9d86d100",
|
|
67
|
+
"@lodestar/light-client": "1.9.0-dev.5d9d86d100",
|
|
68
|
+
"@lodestar/logger": "1.9.0-dev.5d9d86d100",
|
|
69
|
+
"@lodestar/params": "1.9.0-dev.5d9d86d100",
|
|
70
|
+
"@lodestar/state-transition": "1.9.0-dev.5d9d86d100",
|
|
71
|
+
"@lodestar/types": "1.9.0-dev.5d9d86d100",
|
|
72
|
+
"@lodestar/utils": "1.9.0-dev.5d9d86d100",
|
|
73
|
+
"@lodestar/validator": "1.9.0-dev.5d9d86d100",
|
|
74
74
|
"@multiformats/multiaddr": "^11.0.0",
|
|
75
75
|
"@types/lockfile": "^1.0.2",
|
|
76
76
|
"bip39": "^3.1.0",
|
|
@@ -94,11 +94,12 @@
|
|
|
94
94
|
"yargs": "^17.7.1"
|
|
95
95
|
},
|
|
96
96
|
"devDependencies": {
|
|
97
|
+
"@types/debug": "^4.1.7",
|
|
97
98
|
"@types/expand-tilde": "^2.0.0",
|
|
98
99
|
"@types/got": "^9.6.12",
|
|
99
100
|
"@types/inquirer": "^9.0.3",
|
|
100
101
|
"@types/lodash": "^4.14.192",
|
|
101
102
|
"@types/yargs": "^17.0.24"
|
|
102
103
|
},
|
|
103
|
-
"gitHead": "
|
|
104
|
+
"gitHead": "9361af0d564d888c7bfda131201414c0610e6719"
|
|
104
105
|
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { SignerLocal } from "@lodestar/validator";
|
|
2
|
-
import { LocalKeystoreDefinition } from "../interface.js";
|
|
3
|
-
import { KeystoreDecryptOptions } from "./types.js";
|
|
4
|
-
/**
|
|
5
|
-
* Decrypt keystore definitions using a threadpool
|
|
6
|
-
*/
|
|
7
|
-
export declare function decryptKeystoreDefinitions(keystoreDefinitions: LocalKeystoreDefinition[], opts: KeystoreDecryptOptions): Promise<SignerLocal[]>;
|
|
8
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { spawn, Pool, Worker } from "@chainsafe/threads";
|
|
2
|
-
import { SignerType } from "@lodestar/validator";
|
|
3
|
-
import bls from "@chainsafe/bls";
|
|
4
|
-
import { clearKeystoreCache, loadKeystoreCache, writeKeystoreCache } from "../keystoreCache.js";
|
|
5
|
-
import { lockFilepath, unlockFilepath } from "../../../../util/lockfile.js";
|
|
6
|
-
import { defaultPoolSize } from "./poolSize.js";
|
|
7
|
-
/**
|
|
8
|
-
* Decrypt keystore definitions using a threadpool
|
|
9
|
-
*/
|
|
10
|
-
export async function decryptKeystoreDefinitions(keystoreDefinitions, opts) {
|
|
11
|
-
if (opts.cacheFilePath) {
|
|
12
|
-
try {
|
|
13
|
-
const signers = await loadKeystoreCache(opts.cacheFilePath, keystoreDefinitions);
|
|
14
|
-
if (opts === null || opts === void 0 ? void 0 : opts.onDecrypt) {
|
|
15
|
-
opts === null || opts === void 0 ? void 0 : opts.onDecrypt(signers.length - 1);
|
|
16
|
-
}
|
|
17
|
-
opts.logger.debug("Loaded keystores via keystore cache");
|
|
18
|
-
return signers;
|
|
19
|
-
}
|
|
20
|
-
catch {
|
|
21
|
-
// Some error loading the cache, ignore and invalidate cache
|
|
22
|
-
await clearKeystoreCache(opts.cacheFilePath);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
const signers = new Array(keystoreDefinitions.length);
|
|
26
|
-
const passwords = new Array(keystoreDefinitions.length);
|
|
27
|
-
const tasks = [];
|
|
28
|
-
const errors = [];
|
|
29
|
-
const pool = Pool(() => spawn(new Worker("./worker.js"), {
|
|
30
|
-
// The number below is big enough to almost disable the timeout which helps during tests run on unpredictablely slow hosts
|
|
31
|
-
timeout: 5 * 60 * 1000,
|
|
32
|
-
}), defaultPoolSize);
|
|
33
|
-
for (const [index, definition] of keystoreDefinitions.entries()) {
|
|
34
|
-
try {
|
|
35
|
-
lockFilepath(definition.keystorePath);
|
|
36
|
-
}
|
|
37
|
-
catch (e) {
|
|
38
|
-
if (opts.ignoreLockFile) {
|
|
39
|
-
opts.logger.warn("Keystore forcefully loaded even though lockfile exists", {
|
|
40
|
-
path: definition.keystorePath,
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
throw e;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
const task = pool.queue((thread) => thread.decryptKeystoreDefinition(definition));
|
|
48
|
-
tasks.push(task);
|
|
49
|
-
task
|
|
50
|
-
.then((secretKeyBytes) => {
|
|
51
|
-
const signer = {
|
|
52
|
-
type: SignerType.Local,
|
|
53
|
-
secretKey: bls.SecretKey.fromBytes(secretKeyBytes),
|
|
54
|
-
};
|
|
55
|
-
signers[index] = signer;
|
|
56
|
-
passwords[index] = definition.password;
|
|
57
|
-
if (opts === null || opts === void 0 ? void 0 : opts.onDecrypt) {
|
|
58
|
-
opts === null || opts === void 0 ? void 0 : opts.onDecrypt(index);
|
|
59
|
-
}
|
|
60
|
-
})
|
|
61
|
-
.catch((e) => {
|
|
62
|
-
// In-progress tasks can't be canceled, so there's a chance that multiple errors may be caught
|
|
63
|
-
// add to the list of errors
|
|
64
|
-
errors.push(e);
|
|
65
|
-
// cancel all pending tasks, no need to continue decrypting after we hit one error
|
|
66
|
-
for (const task of tasks) {
|
|
67
|
-
task.cancel();
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
try {
|
|
72
|
-
// only resolves if there are no errored tasks
|
|
73
|
-
await pool.completed(true);
|
|
74
|
-
}
|
|
75
|
-
catch (e) {
|
|
76
|
-
// If an error occurs, the program isn't going to be running,
|
|
77
|
-
// so we should unlock all lockfiles we created
|
|
78
|
-
for (const { keystorePath } of keystoreDefinitions) {
|
|
79
|
-
unlockFilepath(keystorePath);
|
|
80
|
-
}
|
|
81
|
-
throw new AggregateError(errors);
|
|
82
|
-
}
|
|
83
|
-
finally {
|
|
84
|
-
await pool.terminate();
|
|
85
|
-
}
|
|
86
|
-
if (opts.cacheFilePath) {
|
|
87
|
-
await writeKeystoreCache(opts.cacheFilePath, signers, passwords);
|
|
88
|
-
opts.logger.debug("Written keystores to keystore cache");
|
|
89
|
-
}
|
|
90
|
-
return signers;
|
|
91
|
-
}
|
|
92
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/cmds/validator/keymanager/decryptKeystoreDefinitions/index.ts"],"names":[],"mappings":"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"}
|