@chainsafe/lodestar 1.50.0-dev.814fe8c461 → 1.50.0-dev.859c034d37
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/cmds/beacon/handler.d.ts +1 -0
- package/lib/cmds/beacon/handler.d.ts.map +1 -1
- package/lib/cmds/beacon/handler.js +7 -6
- package/lib/cmds/beacon/handler.js.map +1 -1
- package/lib/cmds/beacon/initBeaconState.d.ts +2 -2
- package/lib/cmds/beacon/initBeaconState.d.ts.map +1 -1
- package/lib/cmds/beacon/initBeaconState.js +10 -6
- package/lib/cmds/beacon/initBeaconState.js.map +1 -1
- package/lib/cmds/beacon/options.d.ts +1 -0
- package/lib/cmds/beacon/options.d.ts.map +1 -1
- package/lib/cmds/beacon/options.js +6 -0
- package/lib/cmds/beacon/options.js.map +1 -1
- package/lib/cmds/beacon/paths.d.ts +4 -0
- package/lib/cmds/beacon/paths.d.ts.map +1 -1
- package/lib/cmds/beacon/paths.js +3 -0
- package/lib/cmds/beacon/paths.js.map +1 -1
- package/lib/cmds/beacon/pubkeysFile.d.ts +10 -0
- package/lib/cmds/beacon/pubkeysFile.d.ts.map +1 -0
- package/lib/cmds/beacon/pubkeysFile.js +39 -0
- package/lib/cmds/beacon/pubkeysFile.js.map +1 -0
- package/lib/cmds/beacon/stateInitialization/checkpointState.js +6 -5
- package/lib/cmds/beacon/stateInitialization/checkpointState.js.map +1 -1
- package/lib/cmds/dev/handler.d.ts.map +1 -1
- package/lib/cmds/dev/handler.js +3 -1
- package/lib/cmds/dev/handler.js.map +1 -1
- package/package.json +14 -14
- package/src/cmds/beacon/handler.ts +7 -6
- package/src/cmds/beacon/initBeaconState.ts +17 -5
- package/src/cmds/beacon/options.ts +8 -0
- package/src/cmds/beacon/paths.ts +5 -0
- package/src/cmds/beacon/pubkeysFile.ts +50 -0
- package/src/cmds/beacon/stateInitialization/checkpointState.ts +10 -9
- package/src/cmds/dev/handler.ts +3 -1
package/.git-data.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/cmds/beacon/handler.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAC,UAAU,EAAgB,MAAM,uBAAuB,CAAC;AAMhE,OAAO,EAAC,UAAU,EAAsB,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAC,OAAO,EAAC,MAAM,6BAA6B,CAAC;AAYpD,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/cmds/beacon/handler.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAC,UAAU,EAAgB,MAAM,uBAAuB,CAAC;AAMhE,OAAO,EAAC,UAAU,EAAsB,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAC,OAAO,EAAC,MAAM,6BAA6B,CAAC;AAYpD,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AAQxC;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAmIhF;AAED,oEAAoE;AACpE,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU;;;;;;;;;;;;;;;;;GA6DpE;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,EAC3C,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,eAAe,EACvB,QAAQ,SAAe,GACtB,UAAU,CAUZ"}
|
|
@@ -15,6 +15,7 @@ import { getVersionData } from "../../util/version.js";
|
|
|
15
15
|
import { initBeaconState } from "./initBeaconState.js";
|
|
16
16
|
import { initPrivateKeyAndEnr } from "./initPeerIdAndEnr.js";
|
|
17
17
|
import { getBeaconPaths } from "./paths.js";
|
|
18
|
+
import { savePubkeysFile } from "./pubkeysFile.js";
|
|
18
19
|
const DEFAULT_RETENTION_SSZ_OBJECTS_HOURS = 15 * 24;
|
|
19
20
|
const HOURS_TO_MS = 3600 * 1000;
|
|
20
21
|
const EIGHT_GB = 8 * 1024 * 1024 * 1024;
|
|
@@ -51,7 +52,7 @@ export async function beaconHandler(args) {
|
|
|
51
52
|
logger.info("Connected to LevelDB database", { path: options.db.name });
|
|
52
53
|
// BeaconNode setup
|
|
53
54
|
try {
|
|
54
|
-
const { anchorState, config: beaconConfig, isFinalized, } = await initBeaconState(args, beaconPaths.dataDir, config, db, logger);
|
|
55
|
+
const { anchorState, config: beaconConfig, isFinalized, } = await initBeaconState(args, beaconPaths.dataDir, beaconPaths.pubkeysFile, config, db, logger);
|
|
55
56
|
const node = await BeaconNode.init({
|
|
56
57
|
opts: options,
|
|
57
58
|
config: beaconConfig,
|
|
@@ -102,12 +103,10 @@ export async function beaconHandler(args) {
|
|
|
102
103
|
}
|
|
103
104
|
}, logger.info.bind(logger));
|
|
104
105
|
abortController.signal.addEventListener("abort", async () => {
|
|
106
|
+
let exitCode = 0;
|
|
105
107
|
try {
|
|
106
108
|
await node.close();
|
|
107
109
|
logger.debug("Beacon node closed");
|
|
108
|
-
// Explicitly exit until active handles issue is resolved
|
|
109
|
-
// See https://github.com/ChainSafe/lodestar/issues/5642
|
|
110
|
-
process.exit(0);
|
|
111
110
|
}
|
|
112
111
|
catch (e) {
|
|
113
112
|
// If we start from unfinalized state, we don't have checkpoint state so there is this error
|
|
@@ -115,9 +114,11 @@ export async function beaconHandler(args) {
|
|
|
115
114
|
logger.warn("Error closing beacon node", {}, e);
|
|
116
115
|
// Make sure db is always closed gracefully
|
|
117
116
|
await db.close();
|
|
118
|
-
|
|
119
|
-
process.exit(1);
|
|
117
|
+
exitCode = 1;
|
|
120
118
|
}
|
|
119
|
+
savePubkeysFile(pubkeyCache, beaconPaths.pubkeysFile, logger);
|
|
120
|
+
// Explicitly exit process due to potential active handles
|
|
121
|
+
process.exit(exitCode);
|
|
121
122
|
}, { once: true });
|
|
122
123
|
}
|
|
123
124
|
catch (e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/cmds/beacon/handler.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAC,iBAAiB,EAAC,MAAM,SAAS,CAAC;AAE1C,OAAO,EAAC,WAAW,EAAC,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAC,MAAM,EAAC,MAAM,mCAAmC,CAAC;AACzD,OAAO,EAAC,QAAQ,EAAE,UAAU,EAAC,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAC,iBAAiB,EAAC,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAa,aAAa,EAAC,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAC,aAAa,EAAE,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAC,YAAY,EAAE,UAAU,EAAE,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAEtE,OAAO,EAAC,iBAAiB,EAAE,uBAAuB,EAAC,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAC,mBAAmB,EAAE,kBAAkB,EAAE,aAAa,EAAC,MAAM,yBAAyB,CAAC;AAC/F,OAAO,EAAa,mBAAmB,EAAC,MAAM,wBAAwB,CAAC;AAEvE,OAAO,EACL,gBAAgB,EAChB,KAAK,EACL,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAC,cAAc,EAAC,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAC,oBAAoB,EAAC,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAC,cAAc,EAAC,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/cmds/beacon/handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,8 +11,8 @@ type InitBeaconStateResult = {
|
|
|
11
11
|
};
|
|
12
12
|
/**
|
|
13
13
|
* Select serialized anchor bytes before constructing the state used for validation, persistence, and return.
|
|
14
|
-
* Populates the global `pubkeyCache` with the anchor state's validators.
|
|
14
|
+
* Populates the global `pubkeyCache` with the anchor state's validators, reusing `pubkeysFile` if it matches.
|
|
15
15
|
*/
|
|
16
|
-
export declare function initBeaconState(args: BeaconArgs & GlobalArgs, dataDir: string, chainForkConfig: ChainForkConfig, db: IBeaconDb, logger: Logger): Promise<InitBeaconStateResult>;
|
|
16
|
+
export declare function initBeaconState(args: BeaconArgs & GlobalArgs, dataDir: string, pubkeysFile: string, chainForkConfig: ChainForkConfig, db: IBeaconDb, logger: Logger): Promise<InitBeaconStateResult>;
|
|
17
17
|
export {};
|
|
18
18
|
//# sourceMappingURL=initBeaconState.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initBeaconState.d.ts","sourceRoot":"","sources":["../../../src/cmds/beacon/initBeaconState.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAC,YAAY,EAAE,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAE/D,OAAO,EACL,gBAAgB,EAMjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAC,MAAM,EAAc,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAC,UAAU,EAAC,MAAM,gCAAgC,CAAC;AAC1D,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"initBeaconState.d.ts","sourceRoot":"","sources":["../../../src/cmds/beacon/initBeaconState.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAC,YAAY,EAAE,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAE/D,OAAO,EACL,gBAAgB,EAMjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAC,MAAM,EAAc,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAC,UAAU,EAAC,MAAM,gCAAgC,CAAC;AAC1D,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AAexC,KAAK,qBAAqB,GAAG;IAAC,WAAW,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,YAAY,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAC,CAAC;AAEzG;;;GAGG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,UAAU,GAAG,UAAU,EAC7B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,eAAe,EAChC,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,qBAAqB,CAAC,CA6ChC"}
|
|
@@ -2,14 +2,15 @@ import { pubkeyCache } from "@chainsafe/lodestar-z/pubkeys";
|
|
|
2
2
|
import { MAX_PENDING_DEPOSITS_PER_EPOCH, SLOTS_PER_EPOCH } from "@lodestar/params";
|
|
3
3
|
import { computeWeakSubjectivitySummaryFromStateBytes, createBeaconStateView, getValidatorCountFromStateBytes, isWithinWeakSubjectivityPeriodFromSummary, readBeaconStateBytesMetadata, } from "@lodestar/state-transition";
|
|
4
4
|
import { formatBytes } from "@lodestar/utils";
|
|
5
|
+
import { loadPubkeysFile } from "./pubkeysFile.js";
|
|
5
6
|
import { StateInitializationError, StateInitializationErrorCode } from "./stateInitialization/errors.js";
|
|
6
7
|
import { prepareGenesisInitialization } from "./stateInitialization/genesisState.js";
|
|
7
8
|
import { prepareArchivedStateInitialization, prepareCheckpointSourceInitialization, } from "./stateInitialization/prepareStateInitialization.js";
|
|
8
9
|
/**
|
|
9
10
|
* Select serialized anchor bytes before constructing the state used for validation, persistence, and return.
|
|
10
|
-
* Populates the global `pubkeyCache` with the anchor state's validators.
|
|
11
|
+
* Populates the global `pubkeyCache` with the anchor state's validators, reusing `pubkeysFile` if it matches.
|
|
11
12
|
*/
|
|
12
|
-
export async function initBeaconState(args, dataDir, chainForkConfig, db, logger) {
|
|
13
|
+
export async function initBeaconState(args, dataDir, pubkeysFile, chainForkConfig, db, logger) {
|
|
13
14
|
const options = args;
|
|
14
15
|
const useNative = options["chain.nativeStateView"] ?? false;
|
|
15
16
|
if (options.forceCheckpointSync &&
|
|
@@ -30,7 +31,7 @@ export async function initBeaconState(args, dataDir, chainForkConfig, db, logger
|
|
|
30
31
|
options.unsafeCheckpointState ||
|
|
31
32
|
options.lastPersistedCheckpointState);
|
|
32
33
|
if (!options.forceCheckpointSync && (!hasCheckpointSource || archived.isWithinWeakSubjectivityPeriod)) {
|
|
33
|
-
return executeStateInitialization(prepareArchivedStateInitialization(archived, context), useNative);
|
|
34
|
+
return executeStateInitialization(prepareArchivedStateInitialization(archived, context), useNative, pubkeysFile, logger);
|
|
34
35
|
}
|
|
35
36
|
}
|
|
36
37
|
let stateInit = await prepareCheckpointSourceInitialization(options, archived, context);
|
|
@@ -41,7 +42,7 @@ export async function initBeaconState(args, dataDir, chainForkConfig, db, logger
|
|
|
41
42
|
? prepareArchivedStateInitialization(archived, context)
|
|
42
43
|
: await prepareGenesisInitialization(options, context);
|
|
43
44
|
}
|
|
44
|
-
return executeStateInitialization(stateInit, useNative);
|
|
45
|
+
return executeStateInitialization(stateInit, useNative, pubkeysFile, logger);
|
|
45
46
|
}
|
|
46
47
|
/**
|
|
47
48
|
* Read the archived DB anchor without constructing a state. Retain its metadata, weak-subjectivity summary,
|
|
@@ -73,7 +74,7 @@ async function readLatestArchivedStateBytes({ chainForkConfig, db, logger, }) {
|
|
|
73
74
|
* Shared completion template for all sources: construct only the selected state, exactly once.
|
|
74
75
|
* Validate before persistence, and log success only after any required writes succeed.
|
|
75
76
|
*/
|
|
76
|
-
async function executeStateInitialization(stateInit, useNative) {
|
|
77
|
+
async function executeStateInitialization(stateInit, useNative, pubkeysFile, logger) {
|
|
77
78
|
const { config, stateBytes } = stateInit;
|
|
78
79
|
const validatorCount = getValidatorCountFromStateBytes(config, stateBytes);
|
|
79
80
|
if (validatorCount === null) {
|
|
@@ -84,7 +85,10 @@ async function executeStateInitialization(stateInit, useNative) {
|
|
|
84
85
|
// by its native lock; if this headroom is exceeded, it grows by the same fixed step.
|
|
85
86
|
// The view syncs pubkeys during construction, so capacity must be reserved first.
|
|
86
87
|
const headroomEpochs = (90 * 24 * 60 * 60) / (config.SECONDS_PER_SLOT * SLOTS_PER_EPOCH);
|
|
87
|
-
|
|
88
|
+
const pubkeyCacheCapacity = validatorCount + MAX_PENDING_DEPOSITS_PER_EPOCH * Math.ceil(headroomEpochs);
|
|
89
|
+
loadPubkeysFile(pubkeyCache, pubkeysFile, pubkeyCacheCapacity, config, stateBytes, validatorCount, logger);
|
|
90
|
+
// unilaterally expand capacity after best-effort pubkey file loading
|
|
91
|
+
pubkeyCache.ensureCapacity(pubkeyCacheCapacity);
|
|
88
92
|
const anchorState = createBeaconStateView({ useNative, config, stateBytes });
|
|
89
93
|
stateInit.validate(anchorState);
|
|
90
94
|
await stateInit.persist?.(anchorState, stateBytes);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initBeaconState.js","sourceRoot":"","sources":["../../../src/cmds/beacon/initBeaconState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,+BAA+B,CAAC;AAG1D,OAAO,EAAC,8BAA8B,EAAE,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAEL,4CAA4C,EAC5C,qBAAqB,EACrB,+BAA+B,EAC/B,yCAAyC,EACzC,4BAA4B,GAC7B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAS,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAGpD,OAAO,EAAC,wBAAwB,EAAE,4BAA4B,EAAC,MAAM,iCAAiC,CAAC;AACvG,OAAO,EAAC,4BAA4B,EAAC,MAAM,uCAAuC,CAAC;AACnF,OAAO,EACL,kCAAkC,EAClC,qCAAqC,GACtC,MAAM,qDAAqD,CAAC;AAU7D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAA6B,EAC7B,OAAe,EACf,eAAgC,EAChC,EAAa,EACb,MAAc;IAEd,MAAM,OAAO,GAA+B,IAAI,CAAC;IACjD,MAAM,SAAS,GAAG,OAAO,CAAC,uBAAuB,CAAC,IAAI,KAAK,CAAC;IAC5D,IACE,OAAO,CAAC,mBAAmB;QAC3B,CAAC,CAAC,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,iBAAiB,IAAI,OAAO,CAAC,qBAAqB,CAAC,EACxF,CAAC;QACD,MAAM,IAAI,wBAAwB,CAChC,EAAC,IAAI,EAAE,4BAA4B,CAAC,yBAAyB,EAAC,EAC9D,yGAAyG,CAC1G,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAA4B,EAAC,eAAe,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAC,CAAC;IAChF,MAAM,QAAQ,GAAG,MAAM,4BAA4B,CAAC,OAAO,CAAC,CAAC;IAC7D,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,IAAI,OAAO,CAAC,mBAAmB,IAAI,QAAQ,CAAC,8BAA8B,EAAE,CAAC;YAC3E,MAAM,CAAC,IAAI,CAAC,wFAAwF,EAAE;gBACpG,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI;aAC7B,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC;QACjG,CAAC;QACD,MAAM,mBAAmB,GAAG,OAAO,CACjC,OAAO,CAAC,eAAe;YACrB,OAAO,CAAC,iBAAiB;YACzB,OAAO,CAAC,qBAAqB;YAC7B,OAAO,CAAC,4BAA4B,CACvC,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,mBAAmB,IAAI,CAAC,CAAC,mBAAmB,IAAI,QAAQ,CAAC,8BAA8B,CAAC,EAAE,CAAC;YACtG,OAAO,0BAA0B,
|
|
1
|
+
{"version":3,"file":"initBeaconState.js","sourceRoot":"","sources":["../../../src/cmds/beacon/initBeaconState.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../src/cmds/beacon/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAE,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAC,cAAc,EAAmC,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAC,OAAO,EAAa,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAC,WAAW,EAAqB,MAAM,YAAY,CAAC;AAE3D,KAAK,eAAe,GAAG;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,sCAAsC,CAAC,EAAE,MAAM,CAAC;IAChD,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,iBAAiB,CAAC,eAAe,
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../src/cmds/beacon/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAE,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAC,cAAc,EAAmC,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAC,OAAO,EAAa,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAC,WAAW,EAAqB,MAAM,YAAY,CAAC;AAE3D,KAAK,eAAe,GAAG;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,sCAAsC,CAAC,EAAE,MAAM,CAAC;IAChD,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,iBAAiB,CAAC,eAAe,CAoJjE,CAAC;AAEF,KAAK,OAAO,GAAG;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,CAAC;AAkDF,MAAM,MAAM,UAAU,GAAG,eAAe,GAAG,OAAO,GAAG,WAAW,GAAG,cAAc,GAAG,OAAO,CAAC;AAE5F,eAAO,MAAM,aAAa,EAAE;IAAC,CAAC,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAA;CAM5D,CAAC"}
|
|
@@ -93,6 +93,12 @@ export const beaconExtraOptions = {
|
|
|
93
93
|
defaultDescription: defaultBeaconPaths.peerStoreDir,
|
|
94
94
|
type: "string",
|
|
95
95
|
},
|
|
96
|
+
pubkeysFile: {
|
|
97
|
+
hidden: true,
|
|
98
|
+
description: "Pubkey cache file, loaded on startup and saved on graceful shutdown",
|
|
99
|
+
defaultDescription: defaultBeaconPaths.pubkeysFile,
|
|
100
|
+
type: "string",
|
|
101
|
+
},
|
|
96
102
|
persistNetworkIdentity: {
|
|
97
103
|
description: "Whether to reuse the same peer-id across restarts. Validator custody requires custody group count to persist relative to a given ENR. Setting to false will reset ENR and validator custody requirements on restarts.",
|
|
98
104
|
default: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../../src/cmds/beacon/options.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,iBAAiB,EAAE,aAAa,EAAC,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAU,UAAU,EAAC,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAc,kBAAkB,EAAC,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../../src/cmds/beacon/options.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ export type BeaconPathsPartial = Partial<{
|
|
|
7
7
|
dataColumnDir: string;
|
|
8
8
|
persistInvalidSszObjectsDir: string;
|
|
9
9
|
persistOrphanedBlocksDir?: string;
|
|
10
|
+
pubkeysFile: string;
|
|
10
11
|
}>;
|
|
11
12
|
export type BeaconPaths = {
|
|
12
13
|
beaconDir: string;
|
|
@@ -15,6 +16,7 @@ export type BeaconPaths = {
|
|
|
15
16
|
dataColumnDir: string;
|
|
16
17
|
persistInvalidSszObjectsDir: string;
|
|
17
18
|
persistOrphanedBlocksDir: string;
|
|
19
|
+
pubkeysFile: string;
|
|
18
20
|
};
|
|
19
21
|
/**
|
|
20
22
|
* Defines the path structure of the files relevant to the beacon node
|
|
@@ -25,6 +27,7 @@ export type BeaconPaths = {
|
|
|
25
27
|
* ├── beacon.config.json
|
|
26
28
|
* ├── peer-id.json
|
|
27
29
|
* ├── enr
|
|
30
|
+
* ├── pubkeys
|
|
28
31
|
* ├── chain-db
|
|
29
32
|
* └── beacon.log
|
|
30
33
|
* ```
|
|
@@ -40,5 +43,6 @@ export declare const defaultBeaconPaths: GlobalPaths & Required<Partial<{
|
|
|
40
43
|
dataColumnDir: string;
|
|
41
44
|
persistInvalidSszObjectsDir: string;
|
|
42
45
|
persistOrphanedBlocksDir?: string;
|
|
46
|
+
pubkeysFile: string;
|
|
43
47
|
}>>;
|
|
44
48
|
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../src/cmds/beacon/paths.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAC,WAAW,EAAiB,MAAM,uBAAuB,CAAC;AAElE,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,2BAA2B,EAAE,MAAM,CAAC;IACpC,wBAAwB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../src/cmds/beacon/paths.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAC,WAAW,EAAiB,MAAM,uBAAuB,CAAC;AAElE,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,2BAA2B,EAAE,MAAM,CAAC;IACpC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,2BAA2B,EAAE,MAAM,CAAC;IACpC,wBAAwB,EAAE,MAAM,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAE5B,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,EACtD,OAAO,EAAE,MAAM,GACd,WAAW,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAuB5C;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB;eAjElB,MAAM;kBACH,MAAM;WACb,MAAM;mBACE,MAAM;iCACQ,MAAM;+BACR,MAAM;iBACpB,MAAM;GA2D8D,CAAC"}
|
package/lib/cmds/beacon/paths.js
CHANGED
|
@@ -9,6 +9,7 @@ import { getGlobalPaths } from "../../paths/global.js";
|
|
|
9
9
|
* ├── beacon.config.json
|
|
10
10
|
* ├── peer-id.json
|
|
11
11
|
* ├── enr
|
|
12
|
+
* ├── pubkeys
|
|
12
13
|
* ├── chain-db
|
|
13
14
|
* └── beacon.log
|
|
14
15
|
* ```
|
|
@@ -25,6 +26,7 @@ args, network) {
|
|
|
25
26
|
const persistInvalidSszObjectsDir = args.persistInvalidSszObjectsDir ?? path.join(beaconDir, "invalidSszObjects");
|
|
26
27
|
const peerStoreDir = args.peerStoreDir ?? path.join(beaconDir, "peerstore");
|
|
27
28
|
const persistOrphanedBlocksDir = args.persistOrphanedBlocksDir ?? path.join(beaconDir, "orphaned_blocks");
|
|
29
|
+
const pubkeysFile = args.pubkeysFile ?? path.join(beaconDir, "pubkeys");
|
|
28
30
|
return {
|
|
29
31
|
...globalPaths,
|
|
30
32
|
beaconDir,
|
|
@@ -33,6 +35,7 @@ args, network) {
|
|
|
33
35
|
persistInvalidSszObjectsDir,
|
|
34
36
|
peerStoreDir,
|
|
35
37
|
persistOrphanedBlocksDir,
|
|
38
|
+
pubkeysFile,
|
|
36
39
|
};
|
|
37
40
|
}
|
|
38
41
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/cmds/beacon/paths.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAc,cAAc,EAAC,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/cmds/beacon/paths.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAc,cAAc,EAAC,MAAM,uBAAuB,CAAC;AAsBlE;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,cAAc;AAC5B,uFAAuF;AACvF,IAAsD,EACtD,OAAe;IAEf,6BAA6B;IAC7B,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAElD,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;IACpC,MAAM,SAAS,GAAG,OAAO,CAAC;IAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAC7D,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACjF,MAAM,2BAA2B,GAAG,IAAI,CAAC,2BAA2B,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAClH,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC5E,MAAM,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAC1G,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAExE,OAAO;QACL,GAAG,WAAW;QACd,SAAS;QACT,KAAK;QACL,aAAa;QACb,2BAA2B;QAC3B,YAAY;QACZ,wBAAwB;QACxB,WAAW;KACZ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAAC,EAAC,OAAO,EAAE,UAAU,EAAC,EAAE,UAAU,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type PubkeyCache } from "@chainsafe/lodestar-z/pubkeys";
|
|
2
|
+
import { ChainForkConfig } from "@lodestar/config";
|
|
3
|
+
import { Logger } from "@lodestar/utils";
|
|
4
|
+
/**
|
|
5
|
+
* Best effort load of a trusted pubkey cache saved by a previous run, to skip decompressing every validator
|
|
6
|
+
* pubkey on boot. Must be called before any worker uses the cache.
|
|
7
|
+
*/
|
|
8
|
+
export declare function loadPubkeysFile(pubkeyCache: PubkeyCache, filepath: string, maxCapacity: number, config: ChainForkConfig, anchorStateBytes: Uint8Array, anchorValidatorCount: number, logger: Logger): void;
|
|
9
|
+
export declare function savePubkeysFile(pubkeyCache: PubkeyCache, filepath: string, logger: Logger): void;
|
|
10
|
+
//# sourceMappingURL=pubkeysFile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pubkeysFile.d.ts","sourceRoot":"","sources":["../../../src/cmds/beacon/pubkeysFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,WAAW,EAAC,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAC,MAAM,EAAkB,MAAM,iBAAiB,CAAC;AAExD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,eAAe,EACvB,gBAAgB,EAAE,UAAU,EAC5B,oBAAoB,EAAE,MAAM,EAC5B,MAAM,EAAE,MAAM,GACb,IAAI,CAsBN;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAQhG"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { getValidatorPubkeyFromStateBytes } from "@lodestar/state-transition";
|
|
2
|
+
import { byteArrayEquals } from "@lodestar/utils";
|
|
3
|
+
/**
|
|
4
|
+
* Best effort load of a trusted pubkey cache saved by a previous run, to skip decompressing every validator
|
|
5
|
+
* pubkey on boot. Must be called before any worker uses the cache.
|
|
6
|
+
*/
|
|
7
|
+
export function loadPubkeysFile(pubkeyCache, filepath, maxCapacity, config, anchorStateBytes, anchorValidatorCount, logger) {
|
|
8
|
+
const start = Date.now();
|
|
9
|
+
try {
|
|
10
|
+
pubkeyCache.load(filepath, maxCapacity);
|
|
11
|
+
}
|
|
12
|
+
catch (e) {
|
|
13
|
+
logger.debug("Unable to load pubkeys file", { filepath }, e);
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
// load() only checks framing and checksum, so reject a file from another chain. Checking the endpoints
|
|
17
|
+
// suffices since the registry is append-only.
|
|
18
|
+
const overlap = Math.min(pubkeyCache.size, anchorValidatorCount);
|
|
19
|
+
for (const index of overlap > 0 ? [0, overlap - 1] : []) {
|
|
20
|
+
const anchorPubkey = getValidatorPubkeyFromStateBytes(config, anchorStateBytes, index);
|
|
21
|
+
if (anchorPubkey === null || !byteArrayEquals(pubkeyCache.getPubkeyBytesOrThrow(index), anchorPubkey)) {
|
|
22
|
+
pubkeyCache.reset();
|
|
23
|
+
logger.debug("Discarded pubkeys file not matching anchor state", { filepath, index });
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
logger.debug("Loaded pubkeys file", { filepath, count: pubkeyCache.size, durationMs: Date.now() - start });
|
|
28
|
+
}
|
|
29
|
+
export function savePubkeysFile(pubkeyCache, filepath, logger) {
|
|
30
|
+
const start = Date.now();
|
|
31
|
+
try {
|
|
32
|
+
pubkeyCache.save(filepath);
|
|
33
|
+
logger.debug("Saved pubkeys file", { filepath, count: pubkeyCache.size, durationMs: Date.now() - start });
|
|
34
|
+
}
|
|
35
|
+
catch (e) {
|
|
36
|
+
logger.debug("Unable to save pubkeys file", { filepath }, e);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=pubkeysFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pubkeysFile.js","sourceRoot":"","sources":["../../../src/cmds/beacon/pubkeysFile.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,gCAAgC,EAAC,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAS,eAAe,EAAC,MAAM,iBAAiB,CAAC;AAExD;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,WAAwB,EACxB,QAAgB,EAChB,WAAmB,EACnB,MAAuB,EACvB,gBAA4B,EAC5B,oBAA4B,EAC5B,MAAc;IAEd,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,EAAC,QAAQ,EAAC,EAAE,CAAU,CAAC,CAAC;QACpE,OAAO;IACT,CAAC;IAED,uGAAuG;IACvG,8CAA8C;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;IACjE,KAAK,MAAM,KAAK,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACxD,MAAM,YAAY,GAAG,gCAAgC,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACvF,IAAI,YAAY,KAAK,IAAI,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC;YACtG,WAAW,CAAC,KAAK,EAAE,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,kDAAkD,EAAE,EAAC,QAAQ,EAAE,KAAK,EAAC,CAAC,CAAC;YACpF,OAAO;QACT,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAC,CAAC,CAAC;AAC3G,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,WAAwB,EAAE,QAAgB,EAAE,MAAc;IACxF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAC,CAAC,CAAC;IAC1G,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,EAAC,QAAQ,EAAC,EAAE,CAAU,CAAC,CAAC;IACtE,CAAC;AACH,CAAC"}
|
|
@@ -106,6 +106,12 @@ function prepareCheckpointInitialization(candidate, archived, policy, { chainFor
|
|
|
106
106
|
const { isFinalized, ignoreWeakSubjectivityCheck } = policy;
|
|
107
107
|
const config = createBeaconConfig(chainForkConfig, metadata.genesisValidatorsRoot);
|
|
108
108
|
const archivedWithinWeakSubjectivityPeriod = useArchived ? archived.isWithinWeakSubjectivityPeriod : null;
|
|
109
|
+
const passedValidation = archivedWithinWeakSubjectivityPeriod ?? isWithinWeakSubjectivityPeriodFromSummary(config, weakSubjectivity);
|
|
110
|
+
// Fast-fail stale checkpoints before deserializing the state or reserving pubkey-cache capacity.
|
|
111
|
+
if (!passedValidation && !ignoreWeakSubjectivityCheck) {
|
|
112
|
+
const clockEpoch = computeEpochAtSlot(getCurrentSlot(config, weakSubjectivity.genesisTime));
|
|
113
|
+
throw new StateInitializationError({ code: StateInitializationErrorCode.STALE_CHECKPOINT }, `The selected state with epoch ${weakSubjectivity.checkpointEpoch} is not within weak subjectivity period of ${weakSubjectivity.period} epochs from the current epoch ${clockEpoch}. Please verify your checkpoint source`);
|
|
114
|
+
}
|
|
109
115
|
// DB-selected anchors need no persistence, including at slot zero.
|
|
110
116
|
const shouldPersist = isFinalized && !useArchived;
|
|
111
117
|
return {
|
|
@@ -116,11 +122,6 @@ function prepareCheckpointInitialization(candidate, archived, policy, { chainFor
|
|
|
116
122
|
// A supplied checkpoint must match even when the period check is ignored.
|
|
117
123
|
if (expectedCheckpoint !== null)
|
|
118
124
|
assertStateMatchesCheckpoint(state, expectedCheckpoint);
|
|
119
|
-
const passedValidation = archivedWithinWeakSubjectivityPeriod ?? isWithinWeakSubjectivityPeriodFromSummary(config, weakSubjectivity);
|
|
120
|
-
if (!passedValidation && !ignoreWeakSubjectivityCheck) {
|
|
121
|
-
const clockEpoch = computeEpochAtSlot(getCurrentSlot(config, weakSubjectivity.genesisTime));
|
|
122
|
-
throw new StateInitializationError({ code: StateInitializationErrorCode.STALE_CHECKPOINT }, `The selected state with epoch ${weakSubjectivity.checkpointEpoch} is not within weak subjectivity period of ${weakSubjectivity.period} epochs from the current epoch ${clockEpoch}. Please verify your checkpoint source`);
|
|
123
|
-
}
|
|
124
125
|
assertAnchorStateForkMatchesConfig(config, state);
|
|
125
126
|
if (isFinalized) {
|
|
126
127
|
const source = useArchived ? "db" : "checkpoint";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkpointState.js","sourceRoot":"","sources":["../../../../src/cmds/beacon/stateInitialization/checkpointState.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"checkpointState.js","sourceRoot":"","sources":["../../../../src/cmds/beacon/stateInitialization/checkpointState.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/cmds/dev/handler.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAOlD,OAAO,EAAC,QAAQ,EAAC,MAAM,cAAc,CAAC;AAEtC;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/cmds/dev/handler.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAOlD,OAAO,EAAC,QAAQ,EAAC,MAAM,cAAc,CAAC;AAEtC;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAsE3E"}
|
package/lib/cmds/dev/handler.js
CHANGED
|
@@ -25,13 +25,15 @@ export async function devHandler(args) {
|
|
|
25
25
|
}
|
|
26
26
|
// Note: defaults to network "dev", to all paths are custom and don't conflict with networks.
|
|
27
27
|
// Flag --reset cleans up the custom dirs on dev stop
|
|
28
|
-
const beaconDbDir = getBeaconPaths(args, network)
|
|
28
|
+
const { dbDir: beaconDbDir, pubkeysFile } = getBeaconPaths(args, network);
|
|
29
29
|
const validatorsDbDir = getValidatorPaths(args, network).validatorsDbDir;
|
|
30
30
|
// Remove slashing protection db. Otherwise the validators won't be able to propose nor attest
|
|
31
31
|
// until the clock reach a higher slot than the previous run of the dev command
|
|
32
32
|
if (args.genesisTime === undefined) {
|
|
33
33
|
await rimraf(beaconDbDir);
|
|
34
34
|
await rimraf(validatorsDbDir);
|
|
35
|
+
// Validators deposited in the previous run do not exist on the new chain
|
|
36
|
+
await rimraf(pubkeysFile);
|
|
35
37
|
}
|
|
36
38
|
mkdir(beaconDbDir);
|
|
37
39
|
mkdir(validatorsDbDir);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/cmds/dev/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAC,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAC,OAAO,EAAE,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAC,uBAAuB,EAAC,MAAM,8BAA8B,CAAC;AAErE,OAAO,EAAC,KAAK,EAAE,kBAAkB,EAAC,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAC,aAAa,EAAC,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAC,gBAAgB,EAAC,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAC,iBAAiB,EAAC,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAC,iBAAiB,EAAC,MAAM,YAAY,CAAC;AAG7C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAA2B;IAC1D,MAAM,EAAC,MAAM,EAAC,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAE/C,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1B,MAAM,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC/E,OAAO;IACT,CAAC;IAED,2BAA2B;IAC3B,MAAM,OAAO,GAAG,KAAK,CAAC;IACtB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QAC7C,MAAM,KAAK,CAAC,0CAA0C,IAAI,CAAC,OAAO,uBAAuB,CAAC,CAAC;IAC7F,CAAC;IAED,6FAA6F;IAC7F,qDAAqD;IACrD,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/cmds/dev/handler.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chainsafe/lodestar",
|
|
3
|
-
"version": "1.50.0-dev.
|
|
3
|
+
"version": "1.50.0-dev.859c034d37",
|
|
4
4
|
"description": "Command line interface for lodestar",
|
|
5
5
|
"author": "ChainSafe Systems",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -68,17 +68,17 @@
|
|
|
68
68
|
"@libp2p/crypto": "^5.1.23",
|
|
69
69
|
"@libp2p/interface": "^3.3.0",
|
|
70
70
|
"@libp2p/peer-id": "^6.0.15",
|
|
71
|
-
"@lodestar/api": "^1.50.0-dev.
|
|
72
|
-
"@lodestar/beacon-node": "^1.50.0-dev.
|
|
73
|
-
"@lodestar/builder": "^1.50.0-dev.
|
|
74
|
-
"@lodestar/config": "^1.50.0-dev.
|
|
75
|
-
"@lodestar/db": "^1.50.0-dev.
|
|
76
|
-
"@lodestar/logger": "^1.50.0-dev.
|
|
77
|
-
"@lodestar/params": "^1.50.0-dev.
|
|
78
|
-
"@lodestar/state-transition": "^1.50.0-dev.
|
|
79
|
-
"@lodestar/types": "^1.50.0-dev.
|
|
80
|
-
"@lodestar/utils": "^1.50.0-dev.
|
|
81
|
-
"@lodestar/validator": "^1.50.0-dev.
|
|
71
|
+
"@lodestar/api": "^1.50.0-dev.859c034d37",
|
|
72
|
+
"@lodestar/beacon-node": "^1.50.0-dev.859c034d37",
|
|
73
|
+
"@lodestar/builder": "^1.50.0-dev.859c034d37",
|
|
74
|
+
"@lodestar/config": "^1.50.0-dev.859c034d37",
|
|
75
|
+
"@lodestar/db": "^1.50.0-dev.859c034d37",
|
|
76
|
+
"@lodestar/logger": "^1.50.0-dev.859c034d37",
|
|
77
|
+
"@lodestar/params": "^1.50.0-dev.859c034d37",
|
|
78
|
+
"@lodestar/state-transition": "^1.50.0-dev.859c034d37",
|
|
79
|
+
"@lodestar/types": "^1.50.0-dev.859c034d37",
|
|
80
|
+
"@lodestar/utils": "^1.50.0-dev.859c034d37",
|
|
81
|
+
"@lodestar/validator": "^1.50.0-dev.859c034d37",
|
|
82
82
|
"@multiformats/multiaddr": "^13.0.1",
|
|
83
83
|
"deepmerge": "^4.3.1",
|
|
84
84
|
"ethers": "^6.7.0",
|
|
@@ -94,7 +94,7 @@
|
|
|
94
94
|
"devDependencies": {
|
|
95
95
|
"@chainsafe/as-sha256": "^1.2.5",
|
|
96
96
|
"@ethereumjs/rlp": "^4.0.1",
|
|
97
|
-
"@lodestar/test-utils": "^1.50.0-dev.
|
|
97
|
+
"@lodestar/test-utils": "^1.50.0-dev.859c034d37",
|
|
98
98
|
"@types/debug": "^4.1.7",
|
|
99
99
|
"@types/inquirer": "^9.0.3",
|
|
100
100
|
"@types/js-yaml": "^4.0.5",
|
|
@@ -108,5 +108,5 @@
|
|
|
108
108
|
"web3": "^4.0.3",
|
|
109
109
|
"web3-eth-accounts": "^4.0.3"
|
|
110
110
|
},
|
|
111
|
-
"gitHead": "
|
|
111
|
+
"gitHead": "8d43073b2cb8c38d4ac67c8284cbd32e5f11bcfa"
|
|
112
112
|
}
|
|
@@ -27,6 +27,7 @@ import {initBeaconState} from "./initBeaconState.js";
|
|
|
27
27
|
import {initPrivateKeyAndEnr} from "./initPeerIdAndEnr.js";
|
|
28
28
|
import {BeaconArgs} from "./options.js";
|
|
29
29
|
import {getBeaconPaths} from "./paths.js";
|
|
30
|
+
import {savePubkeysFile} from "./pubkeysFile.js";
|
|
30
31
|
|
|
31
32
|
const DEFAULT_RETENTION_SSZ_OBJECTS_HOURS = 15 * 24;
|
|
32
33
|
const HOURS_TO_MS = 3600 * 1000;
|
|
@@ -78,7 +79,7 @@ export async function beaconHandler(args: BeaconArgs & GlobalArgs): Promise<void
|
|
|
78
79
|
anchorState,
|
|
79
80
|
config: beaconConfig,
|
|
80
81
|
isFinalized,
|
|
81
|
-
} = await initBeaconState(args, beaconPaths.dataDir, config, db, logger);
|
|
82
|
+
} = await initBeaconState(args, beaconPaths.dataDir, beaconPaths.pubkeysFile, config, db, logger);
|
|
82
83
|
|
|
83
84
|
const node = await BeaconNode.init({
|
|
84
85
|
opts: options,
|
|
@@ -139,21 +140,21 @@ export async function beaconHandler(args: BeaconArgs & GlobalArgs): Promise<void
|
|
|
139
140
|
abortController.signal.addEventListener(
|
|
140
141
|
"abort",
|
|
141
142
|
async () => {
|
|
143
|
+
let exitCode = 0;
|
|
142
144
|
try {
|
|
143
145
|
await node.close();
|
|
144
146
|
logger.debug("Beacon node closed");
|
|
145
|
-
// Explicitly exit until active handles issue is resolved
|
|
146
|
-
// See https://github.com/ChainSafe/lodestar/issues/5642
|
|
147
|
-
process.exit(0);
|
|
148
147
|
} catch (e) {
|
|
149
148
|
// If we start from unfinalized state, we don't have checkpoint state so there is this error
|
|
150
149
|
// "No state in cache for finalized checkpoint state epoch"
|
|
151
150
|
logger.warn("Error closing beacon node", {}, e as Error);
|
|
152
151
|
// Make sure db is always closed gracefully
|
|
153
152
|
await db.close();
|
|
154
|
-
|
|
155
|
-
process.exit(1);
|
|
153
|
+
exitCode = 1;
|
|
156
154
|
}
|
|
155
|
+
savePubkeysFile(pubkeyCache, beaconPaths.pubkeysFile, logger);
|
|
156
|
+
// Explicitly exit process due to potential active handles
|
|
157
|
+
process.exit(exitCode);
|
|
157
158
|
},
|
|
158
159
|
{once: true}
|
|
159
160
|
);
|
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
import {Logger, formatBytes} from "@lodestar/utils";
|
|
14
14
|
import {GlobalArgs} from "../../options/globalOptions.js";
|
|
15
15
|
import {BeaconArgs} from "./options.js";
|
|
16
|
+
import {loadPubkeysFile} from "./pubkeysFile.js";
|
|
16
17
|
import {StateInitializationError, StateInitializationErrorCode} from "./stateInitialization/errors.js";
|
|
17
18
|
import {prepareGenesisInitialization} from "./stateInitialization/genesisState.js";
|
|
18
19
|
import {
|
|
@@ -30,11 +31,12 @@ type InitBeaconStateResult = {anchorState: IBeaconStateView; config: BeaconConfi
|
|
|
30
31
|
|
|
31
32
|
/**
|
|
32
33
|
* Select serialized anchor bytes before constructing the state used for validation, persistence, and return.
|
|
33
|
-
* Populates the global `pubkeyCache` with the anchor state's validators.
|
|
34
|
+
* Populates the global `pubkeyCache` with the anchor state's validators, reusing `pubkeysFile` if it matches.
|
|
34
35
|
*/
|
|
35
36
|
export async function initBeaconState(
|
|
36
37
|
args: BeaconArgs & GlobalArgs,
|
|
37
38
|
dataDir: string,
|
|
39
|
+
pubkeysFile: string,
|
|
38
40
|
chainForkConfig: ChainForkConfig,
|
|
39
41
|
db: IBeaconDb,
|
|
40
42
|
logger: Logger
|
|
@@ -66,7 +68,12 @@ export async function initBeaconState(
|
|
|
66
68
|
options.lastPersistedCheckpointState
|
|
67
69
|
);
|
|
68
70
|
if (!options.forceCheckpointSync && (!hasCheckpointSource || archived.isWithinWeakSubjectivityPeriod)) {
|
|
69
|
-
return executeStateInitialization(
|
|
71
|
+
return executeStateInitialization(
|
|
72
|
+
prepareArchivedStateInitialization(archived, context),
|
|
73
|
+
useNative,
|
|
74
|
+
pubkeysFile,
|
|
75
|
+
logger
|
|
76
|
+
);
|
|
70
77
|
}
|
|
71
78
|
}
|
|
72
79
|
let stateInit = await prepareCheckpointSourceInitialization(options, archived, context);
|
|
@@ -77,7 +84,7 @@ export async function initBeaconState(
|
|
|
77
84
|
? prepareArchivedStateInitialization(archived, context)
|
|
78
85
|
: await prepareGenesisInitialization(options, context);
|
|
79
86
|
}
|
|
80
|
-
return executeStateInitialization(stateInit, useNative);
|
|
87
|
+
return executeStateInitialization(stateInit, useNative, pubkeysFile, logger);
|
|
81
88
|
}
|
|
82
89
|
|
|
83
90
|
/**
|
|
@@ -122,7 +129,9 @@ async function readLatestArchivedStateBytes({
|
|
|
122
129
|
*/
|
|
123
130
|
async function executeStateInitialization(
|
|
124
131
|
stateInit: StateInitialization,
|
|
125
|
-
useNative: boolean
|
|
132
|
+
useNative: boolean,
|
|
133
|
+
pubkeysFile: string,
|
|
134
|
+
logger: Logger
|
|
126
135
|
): Promise<InitBeaconStateResult> {
|
|
127
136
|
const {config, stateBytes} = stateInit;
|
|
128
137
|
const validatorCount = getValidatorCountFromStateBytes(config, stateBytes);
|
|
@@ -137,7 +146,10 @@ async function executeStateInitialization(
|
|
|
137
146
|
// by its native lock; if this headroom is exceeded, it grows by the same fixed step.
|
|
138
147
|
// The view syncs pubkeys during construction, so capacity must be reserved first.
|
|
139
148
|
const headroomEpochs = (90 * 24 * 60 * 60) / (config.SECONDS_PER_SLOT * SLOTS_PER_EPOCH);
|
|
140
|
-
|
|
149
|
+
const pubkeyCacheCapacity = validatorCount + MAX_PENDING_DEPOSITS_PER_EPOCH * Math.ceil(headroomEpochs);
|
|
150
|
+
loadPubkeysFile(pubkeyCache, pubkeysFile, pubkeyCacheCapacity, config, stateBytes, validatorCount, logger);
|
|
151
|
+
// unilaterally expand capacity after best-effort pubkey file loading
|
|
152
|
+
pubkeyCache.ensureCapacity(pubkeyCacheCapacity);
|
|
141
153
|
const anchorState = createBeaconStateView({useNative, config, stateBytes});
|
|
142
154
|
stateInit.validate(anchorState);
|
|
143
155
|
await stateInit.persist?.(anchorState, stateBytes);
|
|
@@ -21,6 +21,7 @@ type BeaconExtraArgs = {
|
|
|
21
21
|
persistInvalidSszObjectsRetentionHours?: number;
|
|
22
22
|
persistOrphanedBlocksDir?: string;
|
|
23
23
|
peerStoreDir?: string;
|
|
24
|
+
pubkeysFile?: string;
|
|
24
25
|
persistNetworkIdentity?: boolean;
|
|
25
26
|
private?: boolean;
|
|
26
27
|
validatorMonitorLogs?: boolean;
|
|
@@ -141,6 +142,13 @@ export const beaconExtraOptions: CliCommandOptions<BeaconExtraArgs> = {
|
|
|
141
142
|
type: "string",
|
|
142
143
|
},
|
|
143
144
|
|
|
145
|
+
pubkeysFile: {
|
|
146
|
+
hidden: true,
|
|
147
|
+
description: "Pubkey cache file, loaded on startup and saved on graceful shutdown",
|
|
148
|
+
defaultDescription: defaultBeaconPaths.pubkeysFile,
|
|
149
|
+
type: "string",
|
|
150
|
+
},
|
|
151
|
+
|
|
144
152
|
persistNetworkIdentity: {
|
|
145
153
|
description:
|
|
146
154
|
"Whether to reuse the same peer-id across restarts. Validator custody requires custody group count to persist relative to a given ENR. Setting to false will reset ENR and validator custody requirements on restarts.",
|
package/src/cmds/beacon/paths.ts
CHANGED
|
@@ -9,6 +9,7 @@ export type BeaconPathsPartial = Partial<{
|
|
|
9
9
|
dataColumnDir: string;
|
|
10
10
|
persistInvalidSszObjectsDir: string;
|
|
11
11
|
persistOrphanedBlocksDir?: string;
|
|
12
|
+
pubkeysFile: string;
|
|
12
13
|
}>;
|
|
13
14
|
|
|
14
15
|
export type BeaconPaths = {
|
|
@@ -18,6 +19,7 @@ export type BeaconPaths = {
|
|
|
18
19
|
dataColumnDir: string;
|
|
19
20
|
persistInvalidSszObjectsDir: string;
|
|
20
21
|
persistOrphanedBlocksDir: string;
|
|
22
|
+
pubkeysFile: string;
|
|
21
23
|
};
|
|
22
24
|
|
|
23
25
|
/**
|
|
@@ -29,6 +31,7 @@ export type BeaconPaths = {
|
|
|
29
31
|
* ├── beacon.config.json
|
|
30
32
|
* ├── peer-id.json
|
|
31
33
|
* ├── enr
|
|
34
|
+
* ├── pubkeys
|
|
32
35
|
* ├── chain-db
|
|
33
36
|
* └── beacon.log
|
|
34
37
|
* ```
|
|
@@ -48,6 +51,7 @@ export function getBeaconPaths(
|
|
|
48
51
|
const persistInvalidSszObjectsDir = args.persistInvalidSszObjectsDir ?? path.join(beaconDir, "invalidSszObjects");
|
|
49
52
|
const peerStoreDir = args.peerStoreDir ?? path.join(beaconDir, "peerstore");
|
|
50
53
|
const persistOrphanedBlocksDir = args.persistOrphanedBlocksDir ?? path.join(beaconDir, "orphaned_blocks");
|
|
54
|
+
const pubkeysFile = args.pubkeysFile ?? path.join(beaconDir, "pubkeys");
|
|
51
55
|
|
|
52
56
|
return {
|
|
53
57
|
...globalPaths,
|
|
@@ -57,6 +61,7 @@ export function getBeaconPaths(
|
|
|
57
61
|
persistInvalidSszObjectsDir,
|
|
58
62
|
peerStoreDir,
|
|
59
63
|
persistOrphanedBlocksDir,
|
|
64
|
+
pubkeysFile,
|
|
60
65
|
};
|
|
61
66
|
}
|
|
62
67
|
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import {type PubkeyCache} from "@chainsafe/lodestar-z/pubkeys";
|
|
2
|
+
import {ChainForkConfig} from "@lodestar/config";
|
|
3
|
+
import {getValidatorPubkeyFromStateBytes} from "@lodestar/state-transition";
|
|
4
|
+
import {Logger, byteArrayEquals} from "@lodestar/utils";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Best effort load of a trusted pubkey cache saved by a previous run, to skip decompressing every validator
|
|
8
|
+
* pubkey on boot. Must be called before any worker uses the cache.
|
|
9
|
+
*/
|
|
10
|
+
export function loadPubkeysFile(
|
|
11
|
+
pubkeyCache: PubkeyCache,
|
|
12
|
+
filepath: string,
|
|
13
|
+
maxCapacity: number,
|
|
14
|
+
config: ChainForkConfig,
|
|
15
|
+
anchorStateBytes: Uint8Array,
|
|
16
|
+
anchorValidatorCount: number,
|
|
17
|
+
logger: Logger
|
|
18
|
+
): void {
|
|
19
|
+
const start = Date.now();
|
|
20
|
+
try {
|
|
21
|
+
pubkeyCache.load(filepath, maxCapacity);
|
|
22
|
+
} catch (e) {
|
|
23
|
+
logger.debug("Unable to load pubkeys file", {filepath}, e as Error);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// load() only checks framing and checksum, so reject a file from another chain. Checking the endpoints
|
|
28
|
+
// suffices since the registry is append-only.
|
|
29
|
+
const overlap = Math.min(pubkeyCache.size, anchorValidatorCount);
|
|
30
|
+
for (const index of overlap > 0 ? [0, overlap - 1] : []) {
|
|
31
|
+
const anchorPubkey = getValidatorPubkeyFromStateBytes(config, anchorStateBytes, index);
|
|
32
|
+
if (anchorPubkey === null || !byteArrayEquals(pubkeyCache.getPubkeyBytesOrThrow(index), anchorPubkey)) {
|
|
33
|
+
pubkeyCache.reset();
|
|
34
|
+
logger.debug("Discarded pubkeys file not matching anchor state", {filepath, index});
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
logger.debug("Loaded pubkeys file", {filepath, count: pubkeyCache.size, durationMs: Date.now() - start});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function savePubkeysFile(pubkeyCache: PubkeyCache, filepath: string, logger: Logger): void {
|
|
43
|
+
const start = Date.now();
|
|
44
|
+
try {
|
|
45
|
+
pubkeyCache.save(filepath);
|
|
46
|
+
logger.debug("Saved pubkeys file", {filepath, count: pubkeyCache.size, durationMs: Date.now() - start});
|
|
47
|
+
} catch (e) {
|
|
48
|
+
logger.debug("Unable to save pubkeys file", {filepath}, e as Error);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -186,6 +186,16 @@ function prepareCheckpointInitialization(
|
|
|
186
186
|
const {isFinalized, ignoreWeakSubjectivityCheck} = policy;
|
|
187
187
|
const config = createBeaconConfig(chainForkConfig, metadata.genesisValidatorsRoot);
|
|
188
188
|
const archivedWithinWeakSubjectivityPeriod = useArchived ? archived.isWithinWeakSubjectivityPeriod : null;
|
|
189
|
+
const passedValidation =
|
|
190
|
+
archivedWithinWeakSubjectivityPeriod ?? isWithinWeakSubjectivityPeriodFromSummary(config, weakSubjectivity);
|
|
191
|
+
// Fast-fail stale checkpoints before deserializing the state or reserving pubkey-cache capacity.
|
|
192
|
+
if (!passedValidation && !ignoreWeakSubjectivityCheck) {
|
|
193
|
+
const clockEpoch = computeEpochAtSlot(getCurrentSlot(config, weakSubjectivity.genesisTime));
|
|
194
|
+
throw new StateInitializationError(
|
|
195
|
+
{code: StateInitializationErrorCode.STALE_CHECKPOINT},
|
|
196
|
+
`The selected state with epoch ${weakSubjectivity.checkpointEpoch} is not within weak subjectivity period of ${weakSubjectivity.period} epochs from the current epoch ${clockEpoch}. Please verify your checkpoint source`
|
|
197
|
+
);
|
|
198
|
+
}
|
|
189
199
|
// DB-selected anchors need no persistence, including at slot zero.
|
|
190
200
|
const shouldPersist = isFinalized && !useArchived;
|
|
191
201
|
return {
|
|
@@ -195,15 +205,6 @@ function prepareCheckpointInitialization(
|
|
|
195
205
|
validate(state) {
|
|
196
206
|
// A supplied checkpoint must match even when the period check is ignored.
|
|
197
207
|
if (expectedCheckpoint !== null) assertStateMatchesCheckpoint(state, expectedCheckpoint);
|
|
198
|
-
const passedValidation =
|
|
199
|
-
archivedWithinWeakSubjectivityPeriod ?? isWithinWeakSubjectivityPeriodFromSummary(config, weakSubjectivity);
|
|
200
|
-
if (!passedValidation && !ignoreWeakSubjectivityCheck) {
|
|
201
|
-
const clockEpoch = computeEpochAtSlot(getCurrentSlot(config, weakSubjectivity.genesisTime));
|
|
202
|
-
throw new StateInitializationError(
|
|
203
|
-
{code: StateInitializationErrorCode.STALE_CHECKPOINT},
|
|
204
|
-
`The selected state with epoch ${weakSubjectivity.checkpointEpoch} is not within weak subjectivity period of ${weakSubjectivity.period} epochs from the current epoch ${clockEpoch}. Please verify your checkpoint source`
|
|
205
|
-
);
|
|
206
|
-
}
|
|
207
208
|
assertAnchorStateForkMatchesConfig(config, state);
|
|
208
209
|
if (isFinalized) {
|
|
209
210
|
const source = useArchived ? "db" : "checkpoint";
|
package/src/cmds/dev/handler.ts
CHANGED
|
@@ -31,7 +31,7 @@ export async function devHandler(args: IDevArgs & GlobalArgs): Promise<void> {
|
|
|
31
31
|
|
|
32
32
|
// Note: defaults to network "dev", to all paths are custom and don't conflict with networks.
|
|
33
33
|
// Flag --reset cleans up the custom dirs on dev stop
|
|
34
|
-
const beaconDbDir = getBeaconPaths(args, network)
|
|
34
|
+
const {dbDir: beaconDbDir, pubkeysFile} = getBeaconPaths(args, network);
|
|
35
35
|
const validatorsDbDir = getValidatorPaths(args, network).validatorsDbDir;
|
|
36
36
|
|
|
37
37
|
// Remove slashing protection db. Otherwise the validators won't be able to propose nor attest
|
|
@@ -39,6 +39,8 @@ export async function devHandler(args: IDevArgs & GlobalArgs): Promise<void> {
|
|
|
39
39
|
if (args.genesisTime === undefined) {
|
|
40
40
|
await rimraf(beaconDbDir);
|
|
41
41
|
await rimraf(validatorsDbDir);
|
|
42
|
+
// Validators deposited in the previous run do not exist on the new chain
|
|
43
|
+
await rimraf(pubkeysFile);
|
|
42
44
|
}
|
|
43
45
|
|
|
44
46
|
mkdir(beaconDbDir);
|