@chainsafe/lodestar 1.35.0-dev.7931b71e6d → 1.35.0-dev.7a240d3631
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/bin/lodestar.js +3 -0
- package/bin/lodestar.ts +3 -0
- package/lib/applyPreset.d.ts.map +1 -0
- package/lib/applyPreset.js +1 -1
- package/lib/applyPreset.js.map +1 -1
- package/lib/cli.d.ts +3 -3
- package/lib/cli.d.ts.map +1 -0
- package/lib/cli.js +1 -1
- package/lib/cli.js.map +1 -1
- package/lib/cmds/beacon/handler.d.ts +1 -1
- package/lib/cmds/beacon/handler.d.ts.map +1 -0
- package/lib/cmds/beacon/handler.js +1 -1
- package/lib/cmds/beacon/handler.js.map +1 -1
- package/lib/cmds/beacon/index.d.ts.map +1 -0
- package/lib/cmds/beacon/initBeaconState.d.ts.map +1 -0
- package/lib/cmds/beacon/initBeaconState.js.map +1 -1
- package/lib/cmds/beacon/initPeerIdAndEnr.d.ts +2 -2
- package/lib/cmds/beacon/initPeerIdAndEnr.d.ts.map +1 -0
- package/lib/cmds/beacon/initPeerIdAndEnr.js +1 -1
- package/lib/cmds/beacon/initPeerIdAndEnr.js.map +1 -1
- package/lib/cmds/beacon/options.d.ts.map +1 -0
- package/lib/cmds/beacon/paths.d.ts.map +1 -0
- package/lib/cmds/bootnode/handler.d.ts +13 -8
- package/lib/cmds/bootnode/handler.d.ts.map +1 -0
- package/lib/cmds/bootnode/handler.js +2 -2
- package/lib/cmds/bootnode/handler.js.map +1 -1
- package/lib/cmds/bootnode/index.d.ts.map +1 -0
- package/lib/cmds/bootnode/options.d.ts.map +1 -0
- package/lib/cmds/bootnode/options.js +2 -1
- package/lib/cmds/bootnode/options.js.map +1 -1
- package/lib/cmds/dev/files.d.ts.map +1 -0
- package/lib/cmds/dev/handler.d.ts.map +1 -0
- package/lib/cmds/dev/handler.js +1 -1
- package/lib/cmds/dev/handler.js.map +1 -1
- package/lib/cmds/dev/index.d.ts.map +1 -0
- package/lib/cmds/dev/options.d.ts.map +1 -0
- package/lib/cmds/index.d.ts.map +1 -0
- package/lib/cmds/lightclient/handler.d.ts.map +1 -0
- package/lib/cmds/lightclient/index.d.ts.map +1 -0
- package/lib/cmds/lightclient/options.d.ts.map +1 -0
- package/lib/cmds/validator/blsToExecutionChange.d.ts.map +1 -0
- package/lib/cmds/validator/blsToExecutionChange.js.map +1 -1
- package/lib/cmds/validator/handler.d.ts.map +1 -0
- package/lib/cmds/validator/handler.js +3 -5
- package/lib/cmds/validator/handler.js.map +1 -1
- package/lib/cmds/validator/import.d.ts.map +1 -0
- package/lib/cmds/validator/index.d.ts.map +1 -0
- package/lib/cmds/validator/keymanager/decryptKeystoreDefinitions.d.ts.map +1 -0
- package/lib/cmds/validator/keymanager/decryptKeystores/index.d.ts.map +1 -0
- package/lib/cmds/validator/keymanager/decryptKeystores/poolSize.d.ts.map +1 -0
- package/lib/cmds/validator/keymanager/decryptKeystores/threadPool.d.ts.map +1 -0
- package/lib/cmds/validator/keymanager/decryptKeystores/threadPool.js +4 -1
- package/lib/cmds/validator/keymanager/decryptKeystores/threadPool.js.map +1 -1
- package/lib/cmds/validator/keymanager/decryptKeystores/types.d.ts.map +1 -0
- package/lib/cmds/validator/keymanager/decryptKeystores/worker.d.ts.map +1 -0
- package/lib/cmds/validator/keymanager/impl.d.ts.map +1 -0
- package/lib/cmds/validator/keymanager/impl.js +4 -0
- package/lib/cmds/validator/keymanager/impl.js.map +1 -1
- package/lib/cmds/validator/keymanager/interface.d.ts.map +1 -0
- package/lib/cmds/validator/keymanager/keystoreCache.d.ts.map +1 -0
- package/lib/cmds/validator/keymanager/persistedKeys.d.ts.map +1 -0
- package/lib/cmds/validator/keymanager/persistedKeys.js +1 -0
- package/lib/cmds/validator/keymanager/persistedKeys.js.map +1 -1
- package/lib/cmds/validator/keymanager/server.d.ts.map +1 -0
- package/lib/cmds/validator/keymanager/server.js +2 -0
- package/lib/cmds/validator/keymanager/server.js.map +1 -1
- package/lib/cmds/validator/list.d.ts.map +1 -0
- package/lib/cmds/validator/options.d.ts.map +1 -0
- package/lib/cmds/validator/options.js +5 -3
- package/lib/cmds/validator/options.js.map +1 -1
- package/lib/cmds/validator/paths.d.ts.map +1 -0
- package/lib/cmds/validator/signers/importExternalKeystores.d.ts.map +1 -0
- package/lib/cmds/validator/signers/index.d.ts.map +1 -0
- package/lib/cmds/validator/signers/logSigners.d.ts.map +1 -0
- package/lib/cmds/validator/slashingProtection/export.d.ts.map +1 -0
- package/lib/cmds/validator/slashingProtection/import.d.ts.map +1 -0
- package/lib/cmds/validator/slashingProtection/index.d.ts.map +1 -0
- package/lib/cmds/validator/slashingProtection/options.d.ts.map +1 -0
- package/lib/cmds/validator/slashingProtection/utils.d.ts.map +1 -0
- package/lib/cmds/validator/slashingProtection/utils.js +1 -1
- package/lib/cmds/validator/slashingProtection/utils.js.map +1 -1
- package/lib/cmds/validator/voluntaryExit.d.ts.map +1 -0
- package/lib/cmds/validator/voluntaryExit.js +1 -1
- package/lib/cmds/validator/voluntaryExit.js.map +1 -1
- package/lib/config/beaconNodeOptions.d.ts.map +1 -0
- package/lib/config/beaconNodeOptions.js +2 -1
- package/lib/config/beaconNodeOptions.js.map +1 -1
- package/lib/config/beaconParams.d.ts.map +1 -0
- package/lib/config/index.d.ts.map +1 -0
- package/lib/config/peerId.d.ts.map +1 -0
- package/lib/config/types.d.ts.map +1 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js.map +1 -1
- package/lib/migrations/index.d.ts +1 -0
- package/lib/migrations/index.d.ts.map +1 -0
- package/lib/migrations/index.js +1 -1
- package/lib/networks/chiado.d.ts.map +1 -0
- package/lib/networks/dev.d.ts.map +1 -0
- package/lib/networks/ephemery.d.ts.map +1 -0
- package/lib/networks/gnosis.d.ts.map +1 -0
- package/lib/networks/holesky.d.ts.map +1 -0
- package/lib/networks/hoodi.d.ts.map +1 -0
- package/lib/networks/index.d.ts.map +1 -0
- package/lib/networks/index.js +1 -2
- package/lib/networks/index.js.map +1 -1
- package/lib/networks/mainnet.d.ts.map +1 -0
- package/lib/networks/sepolia.d.ts.map +1 -0
- package/lib/options/beaconNodeOptions/api.d.ts +6 -0
- package/lib/options/beaconNodeOptions/api.d.ts.map +1 -0
- package/lib/options/beaconNodeOptions/api.js +14 -6
- package/lib/options/beaconNodeOptions/api.js.map +1 -1
- package/lib/options/beaconNodeOptions/builder.d.ts.map +1 -0
- package/lib/options/beaconNodeOptions/chain.d.ts.map +1 -0
- package/lib/options/beaconNodeOptions/eth1.d.ts.map +1 -0
- package/lib/options/beaconNodeOptions/execution.d.ts.map +1 -0
- package/lib/options/beaconNodeOptions/index.d.ts.map +1 -0
- package/lib/options/beaconNodeOptions/metrics.d.ts.map +1 -0
- package/lib/options/beaconNodeOptions/monitoring.d.ts.map +1 -0
- package/lib/options/beaconNodeOptions/network.d.ts +1 -0
- package/lib/options/beaconNodeOptions/network.d.ts.map +1 -0
- package/lib/options/beaconNodeOptions/network.js +9 -6
- package/lib/options/beaconNodeOptions/network.js.map +1 -1
- package/lib/options/beaconNodeOptions/sync.d.ts.map +1 -0
- package/lib/options/globalOptions.d.ts.map +1 -0
- package/lib/options/index.d.ts.map +1 -0
- package/lib/options/logOptions.d.ts.map +1 -0
- package/lib/options/paramsOptions.d.ts.map +1 -0
- package/lib/paths/global.d.ts.map +1 -0
- package/lib/paths/rootDir.d.ts.map +1 -0
- package/lib/util/errors.d.ts.map +1 -0
- package/lib/util/ethers.d.ts.map +1 -0
- package/lib/util/feeRecipient.d.ts.map +1 -0
- package/lib/util/file.d.ts.map +1 -0
- package/lib/util/file.js +1 -1
- package/lib/util/file.js.map +1 -1
- package/lib/util/format.d.ts.map +1 -0
- package/lib/util/fs.d.ts.map +1 -0
- package/lib/util/gitData/gitDataPath.d.ts.map +1 -0
- package/lib/util/gitData/index.d.ts.map +1 -0
- package/lib/util/gitData/index.js.map +1 -1
- package/lib/util/gitData/writeGitData.d.ts.map +1 -0
- package/lib/util/hasher_bun.d.ts +3 -0
- package/lib/util/hasher_bun.d.ts.map +1 -0
- package/lib/util/hasher_bun.js +118 -0
- package/lib/util/hasher_bun.js.map +1 -0
- package/lib/util/hasher_nodejs.d.ts +3 -0
- package/lib/util/hasher_nodejs.d.ts.map +1 -0
- package/lib/util/hasher_nodejs.js +3 -0
- package/lib/util/hasher_nodejs.js.map +1 -0
- package/lib/util/index.d.ts +3 -3
- package/lib/util/index.d.ts.map +1 -0
- package/lib/util/index.js +3 -3
- package/lib/util/index.js.map +1 -1
- package/lib/util/jwt.d.ts.map +1 -0
- package/lib/util/lockfile.d.ts.map +1 -0
- package/lib/util/logger.d.ts.map +1 -0
- package/lib/util/logger.js +1 -1
- package/lib/util/logger.js.map +1 -1
- package/lib/util/object.d.ts.map +1 -0
- package/lib/util/object.js.map +1 -1
- package/lib/util/passphrase.d.ts.map +1 -0
- package/lib/util/process.d.ts.map +1 -0
- package/lib/util/progress.d.ts.map +1 -0
- package/lib/util/proposerConfig.d.ts.map +1 -0
- package/lib/util/proposerConfig.js.map +1 -1
- package/lib/util/pruneOldFilesInDir.d.ts.map +1 -0
- package/lib/util/sleep.d.ts.map +1 -0
- package/lib/util/stripOffNewlines.d.ts.map +1 -0
- package/lib/util/types.d.ts.map +1 -0
- package/lib/util/version.d.ts.map +1 -0
- package/package.json +33 -20
- package/src/applyPreset.ts +92 -0
- package/src/cli.ts +56 -0
- package/src/cmds/beacon/handler.ts +267 -0
- package/src/cmds/beacon/index.ts +18 -0
- package/src/cmds/beacon/initBeaconState.ts +275 -0
- package/src/cmds/beacon/initPeerIdAndEnr.ts +199 -0
- package/src/cmds/beacon/options.ts +214 -0
- package/src/cmds/beacon/paths.ts +62 -0
- package/src/cmds/bootnode/handler.ts +203 -0
- package/src/cmds/bootnode/index.ts +13 -0
- package/src/cmds/bootnode/options.ts +109 -0
- package/src/cmds/dev/files.ts +52 -0
- package/src/cmds/dev/handler.ts +86 -0
- package/src/cmds/dev/index.ts +18 -0
- package/src/cmds/dev/options.ts +110 -0
- package/src/cmds/index.ts +15 -0
- package/src/cmds/lightclient/handler.ts +36 -0
- package/src/cmds/lightclient/index.ts +18 -0
- package/src/cmds/lightclient/options.ts +21 -0
- package/src/cmds/validator/blsToExecutionChange.ts +91 -0
- package/src/cmds/validator/handler.ts +300 -0
- package/src/cmds/validator/import.ts +111 -0
- package/src/cmds/validator/index.ts +28 -0
- package/src/cmds/validator/keymanager/decryptKeystoreDefinitions.ts +189 -0
- package/src/cmds/validator/keymanager/decryptKeystores/index.ts +1 -0
- package/src/cmds/validator/keymanager/decryptKeystores/poolSize.ts +16 -0
- package/src/cmds/validator/keymanager/decryptKeystores/threadPool.ts +75 -0
- package/src/cmds/validator/keymanager/decryptKeystores/types.ts +12 -0
- package/src/cmds/validator/keymanager/decryptKeystores/worker.ts +24 -0
- package/src/cmds/validator/keymanager/impl.ts +425 -0
- package/src/cmds/validator/keymanager/interface.ts +35 -0
- package/src/cmds/validator/keymanager/keystoreCache.ts +91 -0
- package/src/cmds/validator/keymanager/persistedKeys.ts +268 -0
- package/src/cmds/validator/keymanager/server.ts +86 -0
- package/src/cmds/validator/list.ts +35 -0
- package/src/cmds/validator/options.ts +463 -0
- package/src/cmds/validator/paths.ts +95 -0
- package/src/cmds/validator/signers/importExternalKeystores.ts +69 -0
- package/src/cmds/validator/signers/index.ts +176 -0
- package/src/cmds/validator/signers/logSigners.ts +81 -0
- package/src/cmds/validator/slashingProtection/export.ts +110 -0
- package/src/cmds/validator/slashingProtection/import.ts +70 -0
- package/src/cmds/validator/slashingProtection/index.ts +12 -0
- package/src/cmds/validator/slashingProtection/options.ts +15 -0
- package/src/cmds/validator/slashingProtection/utils.ts +56 -0
- package/src/cmds/validator/voluntaryExit.ts +232 -0
- package/src/config/beaconNodeOptions.ts +68 -0
- package/src/config/beaconParams.ts +87 -0
- package/src/config/index.ts +3 -0
- package/src/config/peerId.ts +50 -0
- package/src/config/types.ts +3 -0
- package/src/index.ts +28 -0
- package/src/migrations/index.ts +0 -0
- package/src/networks/chiado.ts +20 -0
- package/src/networks/dev.ts +27 -0
- package/src/networks/ephemery.ts +9 -0
- package/src/networks/gnosis.ts +18 -0
- package/src/networks/holesky.ts +17 -0
- package/src/networks/hoodi.ts +16 -0
- package/src/networks/index.ts +236 -0
- package/src/networks/mainnet.ts +34 -0
- package/src/networks/sepolia.ts +17 -0
- package/src/options/beaconNodeOptions/api.ts +120 -0
- package/src/options/beaconNodeOptions/builder.ts +63 -0
- package/src/options/beaconNodeOptions/chain.ts +326 -0
- package/src/options/beaconNodeOptions/eth1.ts +95 -0
- package/src/options/beaconNodeOptions/execution.ts +92 -0
- package/src/options/beaconNodeOptions/index.ts +50 -0
- package/src/options/beaconNodeOptions/metrics.ts +39 -0
- package/src/options/beaconNodeOptions/monitoring.ts +61 -0
- package/src/options/beaconNodeOptions/network.ts +401 -0
- package/src/options/beaconNodeOptions/sync.ts +65 -0
- package/src/options/globalOptions.ts +72 -0
- package/src/options/index.ts +3 -0
- package/src/options/logOptions.ts +70 -0
- package/src/options/paramsOptions.ts +72 -0
- package/src/paths/global.ts +24 -0
- package/src/paths/rootDir.ts +11 -0
- package/src/util/errors.ts +20 -0
- package/src/util/ethers.ts +44 -0
- package/src/util/feeRecipient.ts +6 -0
- package/src/util/file.ts +167 -0
- package/src/util/format.ts +76 -0
- package/src/util/fs.ts +59 -0
- package/src/util/gitData/gitDataPath.ts +48 -0
- package/src/util/gitData/index.ts +70 -0
- package/src/util/gitData/writeGitData.ts +10 -0
- package/src/util/hasher_bun.ts +133 -0
- package/src/util/hasher_nodejs.ts +3 -0
- package/src/util/index.ts +17 -0
- package/src/util/jwt.ts +10 -0
- package/src/util/lockfile.ts +45 -0
- package/src/util/logger.ts +105 -0
- package/src/util/object.ts +15 -0
- package/src/util/passphrase.ts +25 -0
- package/src/util/process.ts +25 -0
- package/src/util/progress.ts +58 -0
- package/src/util/proposerConfig.ts +136 -0
- package/src/util/pruneOldFilesInDir.ts +27 -0
- package/src/util/sleep.ts +3 -0
- package/src/util/stripOffNewlines.ts +6 -0
- package/src/util/types.ts +8 -0
- package/src/util/version.ts +74 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proposerConfig.js","sourceRoot":"","sources":["../../src/util/proposerConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"proposerConfig.js","sourceRoot":"","sources":["../../src/util/proposerConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pruneOldFilesInDir.d.ts","sourceRoot":"","sources":["../../src/util/pruneOldFilesInDir.ts"],"names":[],"mappings":"AAGA,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAuB5E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sleep.d.ts","sourceRoot":"","sources":["../../src/util/sleep.ts"],"names":[],"mappings":"AAAA,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripOffNewlines.d.ts","sourceRoot":"","sources":["../../src/util/stripOffNewlines.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAElD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/util/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,wBAAgB,UAAU,CAAC,CAAC,SAAS;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAE5E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/util/version.ts"],"names":[],"mappings":"AAiBA;;;;;;GAMG;AACH,wBAAgB,cAAc,IAAI;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CA4BA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chainsafe/lodestar",
|
|
3
|
-
"version": "1.35.0-dev.
|
|
3
|
+
"version": "1.35.0-dev.7a240d3631",
|
|
4
4
|
"description": "Command line interface for lodestar",
|
|
5
5
|
"author": "ChainSafe Systems",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -9,12 +9,24 @@
|
|
|
9
9
|
},
|
|
10
10
|
"homepage": "https://github.com/ChainSafe/lodestar#readme",
|
|
11
11
|
"type": "module",
|
|
12
|
-
"exports":
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"bun": "./src/index.ts",
|
|
15
|
+
"import": "./lib/index.js"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"imports": {
|
|
19
|
+
"#hashtree-hasher": {
|
|
20
|
+
"bun": "./src/util/hasher_bun.ts",
|
|
21
|
+
"import": "./lib/util/hasher_nodejs.js"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
13
24
|
"files": [
|
|
14
|
-
"
|
|
15
|
-
"lib
|
|
16
|
-
"
|
|
17
|
-
".git-data.json"
|
|
25
|
+
"src",
|
|
26
|
+
"lib",
|
|
27
|
+
"bin",
|
|
28
|
+
".git-data.json",
|
|
29
|
+
"!**/*.tsbuildinfo"
|
|
18
30
|
],
|
|
19
31
|
"bin": {
|
|
20
32
|
"lodestar": "lib/index.js"
|
|
@@ -58,21 +70,22 @@
|
|
|
58
70
|
"@chainsafe/enr": "^5.0.1",
|
|
59
71
|
"@chainsafe/persistent-merkle-tree": "^1.2.1",
|
|
60
72
|
"@chainsafe/ssz": "^1.2.2",
|
|
61
|
-
"@chainsafe/threads": "^1.11.
|
|
73
|
+
"@chainsafe/threads": "^1.11.3",
|
|
62
74
|
"@libp2p/crypto": "^5.0.15",
|
|
63
75
|
"@libp2p/interface": "^2.7.0",
|
|
64
76
|
"@libp2p/peer-id": "^5.1.0",
|
|
65
|
-
"@lodestar/api": "1.35.0-dev.
|
|
66
|
-
"@lodestar/beacon-node": "1.35.0-dev.
|
|
67
|
-
"@lodestar/
|
|
68
|
-
"@lodestar/
|
|
69
|
-
"@lodestar/
|
|
70
|
-
"@lodestar/
|
|
71
|
-
"@lodestar/
|
|
72
|
-
"@lodestar/
|
|
73
|
-
"@lodestar/
|
|
74
|
-
"@lodestar/
|
|
75
|
-
"@lodestar/
|
|
77
|
+
"@lodestar/api": "1.35.0-dev.7a240d3631",
|
|
78
|
+
"@lodestar/beacon-node": "1.35.0-dev.7a240d3631",
|
|
79
|
+
"@lodestar/bun": "git+https://github.com/ChainSafe/lodestar-bun.git",
|
|
80
|
+
"@lodestar/config": "1.35.0-dev.7a240d3631",
|
|
81
|
+
"@lodestar/db": "1.35.0-dev.7a240d3631",
|
|
82
|
+
"@lodestar/light-client": "1.35.0-dev.7a240d3631",
|
|
83
|
+
"@lodestar/logger": "1.35.0-dev.7a240d3631",
|
|
84
|
+
"@lodestar/params": "1.35.0-dev.7a240d3631",
|
|
85
|
+
"@lodestar/state-transition": "1.35.0-dev.7a240d3631",
|
|
86
|
+
"@lodestar/types": "1.35.0-dev.7a240d3631",
|
|
87
|
+
"@lodestar/utils": "1.35.0-dev.7a240d3631",
|
|
88
|
+
"@lodestar/validator": "1.35.0-dev.7a240d3631",
|
|
76
89
|
"@multiformats/multiaddr": "^12.1.3",
|
|
77
90
|
"deepmerge": "^4.3.1",
|
|
78
91
|
"ethers": "^6.7.0",
|
|
@@ -87,12 +100,12 @@
|
|
|
87
100
|
"yargs": "^17.7.1"
|
|
88
101
|
},
|
|
89
102
|
"devDependencies": {
|
|
90
|
-
"@lodestar/test-utils": "1.35.0-dev.
|
|
103
|
+
"@lodestar/test-utils": "1.35.0-dev.7a240d3631",
|
|
91
104
|
"@types/debug": "^4.1.7",
|
|
92
105
|
"@types/inquirer": "^9.0.3",
|
|
93
106
|
"@types/proper-lockfile": "^4.1.4",
|
|
94
107
|
"@types/yargs": "^17.0.24",
|
|
95
108
|
"fastify": "^5.2.1"
|
|
96
109
|
},
|
|
97
|
-
"gitHead": "
|
|
110
|
+
"gitHead": "3865a83107cc3ed44707903e0b6993e880e0eb81"
|
|
98
111
|
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
// MUST import this file first before anything and not import any Lodestar code.
|
|
2
|
+
|
|
3
|
+
import {hasher as hashtreeHasher} from "#hashtree-hasher";
|
|
4
|
+
import {setHasher} from "@chainsafe/persistent-merkle-tree";
|
|
5
|
+
|
|
6
|
+
// Without setting this first, persistent-merkle-tree will use noble instead
|
|
7
|
+
setHasher(hashtreeHasher);
|
|
8
|
+
|
|
9
|
+
//
|
|
10
|
+
// ## Rationale
|
|
11
|
+
//
|
|
12
|
+
// Lodestar implemented PRESET / CONFIG separation to allow importing types and preset constants directly
|
|
13
|
+
// see https://github.com/ChainSafe/lodestar/pull/2585
|
|
14
|
+
//
|
|
15
|
+
// However this prevents dynamic configuration changes which is exactly what the CLI required before.
|
|
16
|
+
// - The dev command can't apply the minimal preset dynamically
|
|
17
|
+
// - `--network gnosis` can't apply a different preset dynamically
|
|
18
|
+
// - `--network chiado` can't apply a different preset dynamically
|
|
19
|
+
//
|
|
20
|
+
// Running this file allows us to keep a static export strategy while NOT requiring users to
|
|
21
|
+
// set LODESTAR_PRESET manually every time.
|
|
22
|
+
|
|
23
|
+
// IMPORTANT: only import Lodestar code here which does not import any other Lodestar libraries
|
|
24
|
+
import {PresetName, presetFromJson, setActivePreset} from "@lodestar/params/setPreset";
|
|
25
|
+
import {readFile} from "./util/file.js";
|
|
26
|
+
|
|
27
|
+
const network = valueOfArg("network");
|
|
28
|
+
const preset = valueOfArg("preset");
|
|
29
|
+
const presetFile = valueOfArg("presetFile");
|
|
30
|
+
|
|
31
|
+
// Apply preset flag if present
|
|
32
|
+
if (preset) {
|
|
33
|
+
process.env.LODESTAR_PRESET = preset;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// If ENV is set overrides, network (otherwise can not override network --dev in mainnet mode)
|
|
37
|
+
else if (process.env.LODESTAR_PRESET) {
|
|
38
|
+
// break
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Translate network to preset
|
|
42
|
+
else if (network) {
|
|
43
|
+
if (network === "dev") {
|
|
44
|
+
process.env.LODESTAR_PRESET = "minimal";
|
|
45
|
+
// the kzg library has hardcoded the mainnet value, do not use presets
|
|
46
|
+
setActivePreset(PresetName.minimal, {FIELD_ELEMENTS_PER_BLOB: 4096});
|
|
47
|
+
} else if (network === "gnosis" || network === "chiado") {
|
|
48
|
+
process.env.LODESTAR_PRESET = "gnosis";
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// If running dev top level command `$ lodestar dev`, apply minimal
|
|
53
|
+
else if (process.argv[2] === "dev") {
|
|
54
|
+
process.env.LODESTAR_PRESET = "minimal";
|
|
55
|
+
process.env.LODESTAR_NETWORK = "dev";
|
|
56
|
+
// the kzg library has hardcoded the mainnet value, do not use presets
|
|
57
|
+
setActivePreset(PresetName.minimal, {FIELD_ELEMENTS_PER_BLOB: 4096});
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (presetFile) {
|
|
61
|
+
// Override the active preset with custom values from file
|
|
62
|
+
// Do not modify the preset to use as a base by passing null
|
|
63
|
+
setActivePreset(null, presetFromJson(readFile(presetFile) ?? {}));
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Valid syntax
|
|
68
|
+
* - `--preset minimal`
|
|
69
|
+
* - `--preset=minimal`
|
|
70
|
+
*/
|
|
71
|
+
function valueOfArg(argName: string): string | null {
|
|
72
|
+
// Syntax `--preset minimal`
|
|
73
|
+
// process.argv = ["--preset", "minimal"];
|
|
74
|
+
|
|
75
|
+
{
|
|
76
|
+
const index = process.argv.indexOf(`--${argName}`);
|
|
77
|
+
if (index > -1) {
|
|
78
|
+
return process.argv[index + 1] ?? "";
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Syntax `--preset=minimal`
|
|
83
|
+
{
|
|
84
|
+
const prefix = `--${argName}=`;
|
|
85
|
+
const item = process.argv.find((arg) => arg.startsWith(prefix));
|
|
86
|
+
if (item) {
|
|
87
|
+
return item.slice(prefix.length);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return null;
|
|
92
|
+
}
|
package/src/cli.ts
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// Must not use `* as yargs`, see https://github.com/yargs/yargs/issues/1131
|
|
2
|
+
import yargs, {Argv} from "yargs";
|
|
3
|
+
import {hideBin} from "yargs/helpers";
|
|
4
|
+
import {registerCommandToYargs} from "@lodestar/utils";
|
|
5
|
+
import {cmds} from "./cmds/index.js";
|
|
6
|
+
import {globalOptions, rcConfigOption} from "./options/index.js";
|
|
7
|
+
import {getVersionData} from "./util/version.js";
|
|
8
|
+
|
|
9
|
+
const {version} = getVersionData();
|
|
10
|
+
const topBanner = `🌟 Lodestar: TypeScript Implementation of the Ethereum Consensus Beacon Chain.
|
|
11
|
+
* Version: ${version}
|
|
12
|
+
* by ChainSafe Systems, 2018-${new Date().getFullYear()}`;
|
|
13
|
+
const bottomBanner = `📖 For more information, check the CLI reference:
|
|
14
|
+
* https://chainsafe.github.io/lodestar/reference/cli
|
|
15
|
+
|
|
16
|
+
✍️ Give feedback and report issues on GitHub:
|
|
17
|
+
* https://github.com/ChainSafe/lodestar`;
|
|
18
|
+
|
|
19
|
+
export const yarg = yargs((hideBin as (args: string[]) => string[])(process.argv));
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Common factory for running the CLI and running integration tests
|
|
23
|
+
* The CLI must actually be executed in a different script
|
|
24
|
+
*/
|
|
25
|
+
export function getLodestarCli(): Argv {
|
|
26
|
+
const lodestar = yarg
|
|
27
|
+
.env("LODESTAR")
|
|
28
|
+
.parserConfiguration({
|
|
29
|
+
// As of yargs v16.1.0 dot-notation breaks strictOptions()
|
|
30
|
+
// Manually processing options is typesafe tho more verbose
|
|
31
|
+
"dot-notation": false,
|
|
32
|
+
})
|
|
33
|
+
.options(globalOptions)
|
|
34
|
+
// blank scriptName so that help text doesn't display the cli name before each command
|
|
35
|
+
.scriptName("")
|
|
36
|
+
.demandCommand(1)
|
|
37
|
+
// Control show help behaviour below on .fail()
|
|
38
|
+
.showHelpOnFail(false)
|
|
39
|
+
.usage(topBanner)
|
|
40
|
+
.epilogue(bottomBanner)
|
|
41
|
+
.version(topBanner)
|
|
42
|
+
.alias("h", "help")
|
|
43
|
+
.alias("v", "version")
|
|
44
|
+
.recommendCommands();
|
|
45
|
+
|
|
46
|
+
// yargs.command and all ./cmds
|
|
47
|
+
for (const cmd of cmds) {
|
|
48
|
+
registerCommandToYargs(lodestar, cmd);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// throw an error if we see an unrecognized cmd
|
|
52
|
+
lodestar.recommendCommands().strict();
|
|
53
|
+
lodestar.config(...rcConfigOption);
|
|
54
|
+
|
|
55
|
+
return lodestar;
|
|
56
|
+
}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import {getHeapStatistics} from "node:v8";
|
|
3
|
+
import {SignableENR} from "@chainsafe/enr";
|
|
4
|
+
import {hasher} from "@chainsafe/persistent-merkle-tree";
|
|
5
|
+
import {BeaconDb, BeaconNode} from "@lodestar/beacon-node";
|
|
6
|
+
import {ChainForkConfig, createBeaconConfig} from "@lodestar/config";
|
|
7
|
+
import {LevelDbController} from "@lodestar/db/controller/level";
|
|
8
|
+
import {LoggerNode, getNodeLogger} from "@lodestar/logger/node";
|
|
9
|
+
import {ACTIVE_PRESET, PresetName} from "@lodestar/params";
|
|
10
|
+
import {ErrorAborted, bytesToInt} from "@lodestar/utils";
|
|
11
|
+
import {ProcessShutdownCallback} from "@lodestar/validator";
|
|
12
|
+
import {BeaconNodeOptions, getBeaconConfigFromArgs} from "../../config/index.js";
|
|
13
|
+
import {getNetworkBootnodes, getNetworkData, isKnownNetworkName, readBootnodes} from "../../networks/index.js";
|
|
14
|
+
import {GlobalArgs, parseBeaconNodeArgs} from "../../options/index.js";
|
|
15
|
+
import {LogArgs} from "../../options/logOptions.js";
|
|
16
|
+
import {
|
|
17
|
+
cleanOldLogFiles,
|
|
18
|
+
mkdir,
|
|
19
|
+
onGracefulShutdown,
|
|
20
|
+
parseLoggerArgs,
|
|
21
|
+
pruneOldFilesInDir,
|
|
22
|
+
writeFile600Perm,
|
|
23
|
+
} from "../../util/index.js";
|
|
24
|
+
import {getVersionData} from "../../util/version.js";
|
|
25
|
+
import {initBeaconState} from "./initBeaconState.js";
|
|
26
|
+
import {initPrivateKeyAndEnr} from "./initPeerIdAndEnr.js";
|
|
27
|
+
import {BeaconArgs} from "./options.js";
|
|
28
|
+
import {getBeaconPaths} from "./paths.js";
|
|
29
|
+
|
|
30
|
+
const DEFAULT_RETENTION_SSZ_OBJECTS_HOURS = 15 * 24;
|
|
31
|
+
const HOURS_TO_MS = 3600 * 1000;
|
|
32
|
+
const EIGHT_GB = 8 * 1024 * 1024 * 1024;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Runs a beacon node.
|
|
36
|
+
*/
|
|
37
|
+
export async function beaconHandler(args: BeaconArgs & GlobalArgs): Promise<void> {
|
|
38
|
+
const {config, options, beaconPaths, network, version, commit, privateKey, logger} = await beaconHandlerInit(args);
|
|
39
|
+
|
|
40
|
+
if (hasher.name !== "hashtree") {
|
|
41
|
+
logger.warn(`hashtree is not supported, using hasher ${hasher.name}`);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const heapSizeLimit = getHeapStatistics().heap_size_limit;
|
|
45
|
+
if (heapSizeLimit < EIGHT_GB) {
|
|
46
|
+
logger.warn(
|
|
47
|
+
`Node.js heap size limit is too low, consider increasing it to at least ${EIGHT_GB}. See https://chainsafe.github.io/lodestar/faqs/#running-a-beacon-node for more details.`
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// initialize directories
|
|
52
|
+
mkdir(beaconPaths.dataDir);
|
|
53
|
+
mkdir(beaconPaths.beaconDir);
|
|
54
|
+
mkdir(beaconPaths.dbDir);
|
|
55
|
+
|
|
56
|
+
const abortController = new AbortController();
|
|
57
|
+
|
|
58
|
+
logger.info("Lodestar", {network, version, commit});
|
|
59
|
+
// Callback for beacon to request forced exit, for e.g. in case of irrecoverable
|
|
60
|
+
// forkchoice errors
|
|
61
|
+
const processShutdownCallback: ProcessShutdownCallback = (err) => {
|
|
62
|
+
logger.error("Process shutdown requested", {}, err);
|
|
63
|
+
process.kill(process.pid, "SIGINT");
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
if (ACTIVE_PRESET === PresetName.minimal) logger.info("ACTIVE_PRESET == minimal preset");
|
|
67
|
+
|
|
68
|
+
const db = new BeaconDb(config, await LevelDbController.create(options.db, {metrics: null, logger}));
|
|
69
|
+
logger.info("Connected to LevelDB database", {path: options.db.name});
|
|
70
|
+
|
|
71
|
+
// BeaconNode setup
|
|
72
|
+
try {
|
|
73
|
+
const {anchorState, wsCheckpoint} = await initBeaconState(
|
|
74
|
+
options,
|
|
75
|
+
args,
|
|
76
|
+
config,
|
|
77
|
+
db,
|
|
78
|
+
logger,
|
|
79
|
+
abortController.signal
|
|
80
|
+
);
|
|
81
|
+
const beaconConfig = createBeaconConfig(config, anchorState.genesisValidatorsRoot);
|
|
82
|
+
const node = await BeaconNode.init({
|
|
83
|
+
opts: options,
|
|
84
|
+
config: beaconConfig,
|
|
85
|
+
db,
|
|
86
|
+
logger,
|
|
87
|
+
processShutdownCallback,
|
|
88
|
+
privateKey,
|
|
89
|
+
dataDir: beaconPaths.dataDir,
|
|
90
|
+
peerStoreDir: beaconPaths.peerStoreDir,
|
|
91
|
+
anchorState,
|
|
92
|
+
wsCheckpoint,
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
// dev debug option to have access to the BN instance
|
|
96
|
+
if (args.attachToGlobalThis) {
|
|
97
|
+
(globalThis as unknown as {bn: BeaconNode}).bn = node;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Prune invalid SSZ objects every interval
|
|
101
|
+
const {persistInvalidSszObjectsDir, persistInvalidSszObjects} = options.chain;
|
|
102
|
+
const pruneInvalidSSZObjectsInterval =
|
|
103
|
+
persistInvalidSszObjectsDir && persistInvalidSszObjects
|
|
104
|
+
? setInterval(() => {
|
|
105
|
+
try {
|
|
106
|
+
const deletedFileCount = pruneOldFilesInDir(
|
|
107
|
+
persistInvalidSszObjectsDir,
|
|
108
|
+
(args.persistInvalidSszObjectsRetentionHours ?? DEFAULT_RETENTION_SSZ_OBJECTS_HOURS) * HOURS_TO_MS
|
|
109
|
+
);
|
|
110
|
+
logger.info("Pruned invalid SSZ objects", {deletedFileCount});
|
|
111
|
+
} catch (e) {
|
|
112
|
+
logger.warn("Error pruning invalid SSZ objects", {persistInvalidSszObjectsDir}, e as Error);
|
|
113
|
+
}
|
|
114
|
+
// Run every ~1 hour
|
|
115
|
+
}, HOURS_TO_MS)
|
|
116
|
+
: null;
|
|
117
|
+
|
|
118
|
+
// Intercept SIGINT signal, to perform final ops before exiting
|
|
119
|
+
onGracefulShutdown(async () => {
|
|
120
|
+
if (args.persistNetworkIdentity) {
|
|
121
|
+
try {
|
|
122
|
+
const networkIdentity = await node.network.getNetworkIdentity();
|
|
123
|
+
const enrPath = path.join(beaconPaths.beaconDir, "enr");
|
|
124
|
+
writeFile600Perm(enrPath, networkIdentity.enr);
|
|
125
|
+
} catch (e) {
|
|
126
|
+
logger.warn("Unable to persist enr", {}, e as Error);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
abortController.abort();
|
|
130
|
+
|
|
131
|
+
if (pruneInvalidSSZObjectsInterval !== null) {
|
|
132
|
+
clearInterval(pruneInvalidSSZObjectsInterval);
|
|
133
|
+
}
|
|
134
|
+
}, logger.info.bind(logger));
|
|
135
|
+
|
|
136
|
+
abortController.signal.addEventListener(
|
|
137
|
+
"abort",
|
|
138
|
+
async () => {
|
|
139
|
+
try {
|
|
140
|
+
await node.close();
|
|
141
|
+
logger.debug("Beacon node closed");
|
|
142
|
+
// Explicitly exit until active handles issue is resolved
|
|
143
|
+
// See https://github.com/ChainSafe/lodestar/issues/5642
|
|
144
|
+
process.exit(0);
|
|
145
|
+
} catch (e) {
|
|
146
|
+
logger.error("Error closing beacon node", {}, e as Error);
|
|
147
|
+
// Make sure db is always closed gracefully
|
|
148
|
+
await db.close();
|
|
149
|
+
// Must explicitly exit process due to potential active handles
|
|
150
|
+
process.exit(1);
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
{once: true}
|
|
154
|
+
);
|
|
155
|
+
} catch (e) {
|
|
156
|
+
await db.close();
|
|
157
|
+
|
|
158
|
+
if (e instanceof ErrorAborted) {
|
|
159
|
+
logger.info(e.message); // Let the user know the abort was received but don't print as error
|
|
160
|
+
} else {
|
|
161
|
+
throw e;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/** Separate function to simplify unit testing of options merging */
|
|
167
|
+
export async function beaconHandlerInit(args: BeaconArgs & GlobalArgs) {
|
|
168
|
+
const {config, network} = getBeaconConfigFromArgs(args);
|
|
169
|
+
|
|
170
|
+
const beaconNodeOptions = new BeaconNodeOptions(parseBeaconNodeArgs(args));
|
|
171
|
+
|
|
172
|
+
const {version, commit} = getVersionData();
|
|
173
|
+
const beaconPaths = getBeaconPaths(args, network);
|
|
174
|
+
// TODO: Rename db.name to db.path or db.location
|
|
175
|
+
beaconNodeOptions.set({db: {name: beaconPaths.dbDir}});
|
|
176
|
+
beaconNodeOptions.set({
|
|
177
|
+
chain: {
|
|
178
|
+
validatorMonitorLogs: args.validatorMonitorLogs,
|
|
179
|
+
persistInvalidSszObjectsDir: beaconPaths.persistInvalidSszObjectsDir,
|
|
180
|
+
persistOrphanedBlocksDir: beaconPaths.persistOrphanedBlocksDir,
|
|
181
|
+
},
|
|
182
|
+
});
|
|
183
|
+
// Add metrics metadata to show versioning + network info in Prometheus + Grafana
|
|
184
|
+
beaconNodeOptions.set({metrics: {metadata: {version, commit, network}}});
|
|
185
|
+
// Add detailed version string for API node/version endpoint
|
|
186
|
+
beaconNodeOptions.set({api: {commit, version}});
|
|
187
|
+
|
|
188
|
+
if (args.supernode) {
|
|
189
|
+
beaconNodeOptions.set({chain: {supernode: true}, network: {supernode: true}});
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// Set known depositContractDeployBlock
|
|
193
|
+
if (isKnownNetworkName(network)) {
|
|
194
|
+
const {depositContractDeployBlock} = getNetworkData(network);
|
|
195
|
+
beaconNodeOptions.set({eth1: {depositContractDeployBlock}});
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
const logger = initLogger(args, beaconPaths.dataDir, config);
|
|
199
|
+
const {privateKey, enr} = await initPrivateKeyAndEnr(args, beaconPaths.beaconDir, logger);
|
|
200
|
+
|
|
201
|
+
if (args.discv5 !== false) {
|
|
202
|
+
// Inject ENR to beacon options
|
|
203
|
+
beaconNodeOptions.set({network: {discv5: {enr: enr.encodeTxt(), config: {enrUpdate: !enr.ip && !enr.ip6}}}});
|
|
204
|
+
|
|
205
|
+
// Combine bootnodes from different sources
|
|
206
|
+
const bootnodes = (beaconNodeOptions.get().network?.discv5?.bootEnrs ?? []).concat(
|
|
207
|
+
args.bootnodesFile ? readBootnodes(args.bootnodesFile) : [],
|
|
208
|
+
isKnownNetworkName(network) ? await getNetworkBootnodes(network) : []
|
|
209
|
+
);
|
|
210
|
+
// Deduplicate and set combined bootnodes
|
|
211
|
+
beaconNodeOptions.set({network: {discv5: {bootEnrs: [...new Set(bootnodes)]}}});
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
beaconNodeOptions.set({chain: {initialCustodyGroupCount: getInitialCustodyGroupCount(args, config, enr)}});
|
|
215
|
+
|
|
216
|
+
if (args.disableLightClientServer) {
|
|
217
|
+
beaconNodeOptions.set({chain: {disableLightClientServer: true}});
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
if (args.private) {
|
|
221
|
+
beaconNodeOptions.set({network: {private: true}, api: {private: true}});
|
|
222
|
+
} else {
|
|
223
|
+
const versionStr = `Lodestar/${version}`;
|
|
224
|
+
const simpleVersionStr = version.split("/")[0];
|
|
225
|
+
// Add simple version string for libp2p agent version
|
|
226
|
+
beaconNodeOptions.set({network: {version: simpleVersionStr}});
|
|
227
|
+
// Add User-Agent header to all builder requests
|
|
228
|
+
beaconNodeOptions.set({executionBuilder: {userAgent: versionStr}});
|
|
229
|
+
// Set jwt version with version string
|
|
230
|
+
beaconNodeOptions.set({executionEngine: {jwtVersion: versionStr}, eth1: {jwtVersion: versionStr}});
|
|
231
|
+
// Set commit and version for ClientVersion
|
|
232
|
+
beaconNodeOptions.set({executionEngine: {commit, version}});
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// Render final options
|
|
236
|
+
const options = beaconNodeOptions.getWithDefaults();
|
|
237
|
+
|
|
238
|
+
return {config, options, beaconPaths, network, version, commit, privateKey, logger};
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
export function initLogger(
|
|
242
|
+
args: LogArgs & Pick<GlobalArgs, "dataDir">,
|
|
243
|
+
dataDir: string,
|
|
244
|
+
config: ChainForkConfig,
|
|
245
|
+
fileName = "beacon.log"
|
|
246
|
+
): LoggerNode {
|
|
247
|
+
const defaultLogFilepath = path.join(dataDir, fileName);
|
|
248
|
+
const logger = getNodeLogger(parseLoggerArgs(args, {defaultLogFilepath}, config));
|
|
249
|
+
try {
|
|
250
|
+
cleanOldLogFiles(args, {defaultLogFilepath});
|
|
251
|
+
} catch (e) {
|
|
252
|
+
logger.debug("Not able to delete log files", {}, e as Error);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
return logger;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
function getInitialCustodyGroupCount(args: BeaconArgs & GlobalArgs, config: ChainForkConfig, enr: SignableENR): number {
|
|
259
|
+
if (args.supernode) {
|
|
260
|
+
return config.NUMBER_OF_CUSTODY_GROUPS;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
const enrCgcBytes = enr.kvs.get("cgc");
|
|
264
|
+
const enrCgc = enrCgcBytes != null ? bytesToInt(enrCgcBytes, "be") : 0;
|
|
265
|
+
|
|
266
|
+
return Math.max(enrCgc, config.CUSTODY_REQUIREMENT);
|
|
267
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import {CliCommand, CliCommandOptions} from "@lodestar/utils";
|
|
2
|
+
import {GlobalArgs} from "../../options/index.js";
|
|
3
|
+
import {beaconHandler} from "./handler.js";
|
|
4
|
+
import {BeaconArgs, beaconOptions} from "./options.js";
|
|
5
|
+
|
|
6
|
+
export const beacon: CliCommand<BeaconArgs, GlobalArgs> = {
|
|
7
|
+
command: "beacon",
|
|
8
|
+
describe: "Run a beacon chain node",
|
|
9
|
+
docsFolder: "run/beacon-management",
|
|
10
|
+
examples: [
|
|
11
|
+
{
|
|
12
|
+
command: "beacon --network hoodi",
|
|
13
|
+
description: "Run a beacon chain node and connect to the hoodi testnet",
|
|
14
|
+
},
|
|
15
|
+
],
|
|
16
|
+
options: beaconOptions as CliCommandOptions<BeaconArgs>,
|
|
17
|
+
handler: beaconHandler,
|
|
18
|
+
};
|