@chainsafe/lodestar 1.36.0-dev.f657221d88 → 1.36.0-dev.faac5550fb
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.map +1 -1
- package/lib/cmds/beacon/handler.js +16 -9
- package/lib/cmds/beacon/handler.js.map +1 -1
- package/lib/cmds/beacon/initBeaconState.d.ts +6 -1
- package/lib/cmds/beacon/initBeaconState.d.ts.map +1 -1
- package/lib/cmds/beacon/initBeaconState.js +126 -21
- package/lib/cmds/beacon/initBeaconState.js.map +1 -1
- package/lib/cmds/beacon/options.d.ts +2 -0
- package/lib/cmds/beacon/options.d.ts.map +1 -1
- package/lib/cmds/beacon/options.js +13 -1
- package/lib/cmds/beacon/options.js.map +1 -1
- package/lib/cmds/dev/options.d.ts +1 -0
- package/lib/cmds/dev/options.d.ts.map +1 -1
- package/lib/options/beaconNodeOptions/chain.d.ts +1 -0
- package/lib/options/beaconNodeOptions/chain.d.ts.map +1 -1
- package/lib/options/beaconNodeOptions/chain.js +8 -1
- package/lib/options/beaconNodeOptions/chain.js.map +1 -1
- package/lib/options/beaconNodeOptions/index.d.ts +1 -0
- package/lib/options/beaconNodeOptions/index.d.ts.map +1 -1
- package/lib/options/globalOptions.d.ts +2 -0
- package/lib/options/globalOptions.d.ts.map +1 -1
- package/lib/options/globalOptions.js +6 -0
- package/lib/options/globalOptions.js.map +1 -1
- package/lib/util/file.d.ts.map +1 -1
- package/lib/util/file.js +4 -1
- package/lib/util/file.js.map +1 -1
- package/lib/util/hasher_bun.d.ts.map +1 -1
- package/lib/util/hasher_bun.js +2 -1
- package/lib/util/hasher_bun.js.map +1 -1
- package/package.json +15 -14
- package/src/cmds/beacon/handler.ts +25 -10
- package/src/cmds/beacon/initBeaconState.ts +166 -21
- package/src/cmds/beacon/options.ts +17 -1
- package/src/options/beaconNodeOptions/chain.ts +10 -1
- package/src/options/globalOptions.ts +9 -0
- package/src/util/file.ts +4 -1
- package/src/util/hasher_bun.ts +3 -1
|
@@ -124,6 +124,7 @@ export declare const beaconNodeOptions: {
|
|
|
124
124
|
"chain.nHistoricalStatesFileDataStore": import("@lodestar/utils").CliOptionDefinition<boolean | undefined>;
|
|
125
125
|
"chain.maxBlockStates": import("@lodestar/utils").CliOptionDefinition<number | undefined>;
|
|
126
126
|
"chain.maxCPStateEpochsInMemory": import("@lodestar/utils").CliOptionDefinition<number | undefined>;
|
|
127
|
+
"chain.maxCPStateEpochsOnDisk": import("@lodestar/utils").CliOptionDefinition<number | undefined>;
|
|
127
128
|
"chain.pruneHistory": import("@lodestar/utils").CliOptionDefinition<boolean | undefined>;
|
|
128
129
|
"api.maxGindicesInProof": import("@lodestar/utils").CliOptionDefinition<number | undefined>;
|
|
129
130
|
"rest.namespace": import("@lodestar/utils").CliOptionDefinition<string[] | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/options/beaconNodeOptions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAC,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AAEjD,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,GACtC,KAAK,CAAC,SAAS,GACf,IAAI,CAAC,QAAQ,GACb,SAAS,CAAC,mBAAmB,GAC7B,OAAO,CAAC,oBAAoB,GAC5B,OAAO,CAAC,WAAW,GACnB,UAAU,CAAC,cAAc,GACzB,OAAO,CAAC,WAAW,GACnB,IAAI,CAAC,QAAQ,CAAC;AAEhB,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,CAc9F;AAED,eAAO,MAAM,iBAAiB
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/options/beaconNodeOptions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAC,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AAEjD,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,GACtC,KAAK,CAAC,SAAS,GACf,IAAI,CAAC,QAAQ,GACb,SAAS,CAAC,mBAAmB,GAC7B,OAAO,CAAC,oBAAoB,GAC5B,OAAO,CAAC,WAAW,GACnB,UAAU,CAAC,cAAc,GACzB,OAAO,CAAC,WAAW,GACnB,IAAI,CAAC,QAAQ,CAAC;AAEhB,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,CAc9F;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAU7B,CAAC"}
|
|
@@ -8,6 +8,7 @@ type GlobalSingleArgs = {
|
|
|
8
8
|
presetFile?: string;
|
|
9
9
|
rcConfig?: string;
|
|
10
10
|
supernode?: boolean;
|
|
11
|
+
semiSupernode?: boolean;
|
|
11
12
|
};
|
|
12
13
|
export declare const defaultNetwork: NetworkName;
|
|
13
14
|
export declare const rcConfigOption: [string, string, (configPath: string) => Record<string, unknown>];
|
|
@@ -25,6 +26,7 @@ export declare const globalOptions: {
|
|
|
25
26
|
presetFile: import("@lodestar/utils").CliOptionDefinition<string | undefined>;
|
|
26
27
|
rcConfig: import("@lodestar/utils").CliOptionDefinition<string | undefined>;
|
|
27
28
|
supernode: import("@lodestar/utils").CliOptionDefinition<boolean | undefined>;
|
|
29
|
+
semiSupernode: import("@lodestar/utils").CliOptionDefinition<boolean | undefined>;
|
|
28
30
|
};
|
|
29
31
|
export {};
|
|
30
32
|
//# sourceMappingURL=globalOptions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"globalOptions.d.ts","sourceRoot":"","sources":["../../src/options/globalOptions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,WAAW,EAAe,MAAM,sBAAsB,CAAC;AAE/D,OAAO,EAAC,WAAW,EAAgB,MAAM,oBAAoB,CAAC;AAE9D,KAAK,gBAAgB,GAAG;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"globalOptions.d.ts","sourceRoot":"","sources":["../../src/options/globalOptions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,WAAW,EAAe,MAAM,sBAAsB,CAAC;AAE/D,OAAO,EAAC,WAAW,EAAgB,MAAM,oBAAoB,CAAC;AAE9D,KAAK,gBAAgB,GAAG;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,WAAuB,CAAC;AAoDrD,eAAO,MAAM,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAI5F,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG,WAAW,CAAC;AAExD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;CAGzB,CAAC"}
|
|
@@ -36,6 +36,12 @@ const globalSingleOptions = {
|
|
|
36
36
|
supernode: {
|
|
37
37
|
description: "Subscribe to and custody all data column sidecar subnets",
|
|
38
38
|
type: "boolean",
|
|
39
|
+
conflicts: ["semiSupernode"],
|
|
40
|
+
},
|
|
41
|
+
semiSupernode: {
|
|
42
|
+
description: "Subscribe to and custody half of the data column sidecar subnets to support blob reconstruction, enabling more efficient data availability with lower bandwidth and storage requirements compared to a supernode.",
|
|
43
|
+
type: "boolean",
|
|
44
|
+
conflicts: ["supernode"],
|
|
39
45
|
},
|
|
40
46
|
};
|
|
41
47
|
export const rcConfigOption = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"globalOptions.js","sourceRoot":"","sources":["../../src/options/globalOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAc,YAAY,EAAC,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAc,aAAa,EAAC,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"globalOptions.js","sourceRoot":"","sources":["../../src/options/globalOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAc,YAAY,EAAC,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAc,aAAa,EAAC,MAAM,oBAAoB,CAAC;AAa9D,MAAM,CAAC,MAAM,cAAc,GAAgB,SAAS,CAAC;AAErD,MAAM,mBAAmB,GAAwC;IAC/D,OAAO,EAAE;QACP,WAAW,EAAE,8BAA8B;QAC3C,IAAI,EAAE,QAAQ;KACf;IAED,OAAO,EAAE;QACP,WAAW,EAAE,sDAAsD;QACnE,IAAI,EAAE,QAAQ;QACd,kBAAkB,EAAE,cAAc;QAClC,OAAO,EAAE,YAAY;KACtB;IAED,UAAU,EAAE;QACV,WAAW,EAAE,4BAA4B;QACzC,IAAI,EAAE,QAAQ;KACf;IAED,uDAAuD;IACvD,MAAM,EAAE;QACN,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,aAAa;KACvB;IAED,UAAU,EAAE;QACV,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,4EAA4E;QACzF,IAAI,EAAE,QAAQ;KACf;IAED,QAAQ,EAAE;QACR,WAAW,EAAE,+EAA+E;QAC5F,IAAI,EAAE,QAAQ;KACf;IAED,SAAS,EAAE;QACT,WAAW,EAAE,0DAA0D;QACvE,IAAI,EAAE,SAAS;QACf,SAAS,EAAE,CAAC,eAAe,CAAC;KAC7B;IAED,aAAa,EAAE;QACb,WAAW,EACT,mNAAmN;QACrN,IAAI,EAAE,SAAS;QACf,SAAS,EAAE,CAAC,WAAW,CAAC;KACzB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAsE;IAC/F,UAAU;IACV,mBAAmB,CAAC,QAAQ,CAAC,WAAqB;IAClD,CAAC,UAAkB,EAA2B,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;CAC/F,CAAC;AAIF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,GAAG,mBAAmB;IACtB,GAAG,aAAa;CACjB,CAAC"}
|
package/lib/util/file.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/util/file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AAKzB,OAAO,IAAI,MAAM,SAAS,CAAC;AAO3B,eAAO,MAAM,UAAU,aASrB,CAAC;AAEH,oBAAY,UAAU;IACpB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,IAAI,SAAS;CACd;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,CAAC,CAUpE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM,CActE;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,EAAE,CAAC,gBAA0B,GAAG,IAAI,CAItG;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,gBAAgB,GAAG,IAAI,CAGpG;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAK3E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAS1F;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO9F;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAc/E;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/util/file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AAKzB,OAAO,IAAI,MAAM,SAAS,CAAC;AAO3B,eAAO,MAAM,UAAU,aASrB,CAAC;AAEH,oBAAY,UAAU;IACpB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,IAAI,SAAS;CACd;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,CAAC,CAUpE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM,CActE;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,EAAE,CAAC,gBAA0B,GAAG,IAAI,CAItG;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,gBAAgB,GAAG,IAAI,CAGpG;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAK3E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAS1F;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO9F;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAc/E;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAa/E"}
|
package/lib/util/file.js
CHANGED
|
@@ -137,7 +137,10 @@ export async function downloadFile(pathDest, url) {
|
|
|
137
137
|
*/
|
|
138
138
|
export async function downloadOrLoadFile(pathOrUrl) {
|
|
139
139
|
if (isUrl(pathOrUrl)) {
|
|
140
|
-
const res = await fetch(pathOrUrl
|
|
140
|
+
const res = await fetch(pathOrUrl, {
|
|
141
|
+
// Ensure we only receive SSZ responses if REST API is queried
|
|
142
|
+
headers: { accept: "application/octet-stream" },
|
|
143
|
+
});
|
|
141
144
|
if (!res.ok) {
|
|
142
145
|
throw new Error(`Failed to download file from ${pathOrUrl}: ${res.status} ${res.statusText}`);
|
|
143
146
|
}
|
package/lib/util/file.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/util/file.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/util/file.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hasher_bun.d.ts","sourceRoot":"","sources":["../../src/util/hasher_bun.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,MAAM,EAKP,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"hasher_bun.d.ts","sourceRoot":"","sources":["../../src/util/hasher_bun.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,MAAM,EAKP,MAAM,mCAAmC,CAAC;AAwB3C,eAAO,MAAM,MAAM,EAAE,MAsEpB,CAAC"}
|
package/lib/util/hasher_bun.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { byteArrayIntoHashObject } from "@chainsafe/as-sha256";
|
|
2
2
|
import { doDigestNLevel, doMerkleizeBlockArray, doMerkleizeBlocksBytes, } from "@chainsafe/persistent-merkle-tree";
|
|
3
|
-
import {
|
|
3
|
+
import { hashtree } from "@lodestar/bun";
|
|
4
|
+
const { digest2Bytes32, digest2Bytes32Into, hashInto } = hashtree;
|
|
4
5
|
/**
|
|
5
6
|
* Best SIMD implementation is in 512 bits = 64 bytes
|
|
6
7
|
* If not, hashtree will make a loop inside
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hasher_bun.js","sourceRoot":"","sources":["../../src/util/hasher_bun.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,uBAAuB,EAAC,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAKL,cAAc,EACd,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAC,cAAc,EAAE,kBAAkB,EAAE,QAAQ,EAAC,
|
|
1
|
+
{"version":3,"file":"hasher_bun.js","sourceRoot":"","sources":["../../src/util/hasher_bun.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.36.0-dev.
|
|
3
|
+
"version": "1.36.0-dev.faac5550fb",
|
|
4
4
|
"description": "Command line interface for lodestar",
|
|
5
5
|
"author": "ChainSafe Systems",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
"exports": {
|
|
13
13
|
".": {
|
|
14
14
|
"bun": "./src/index.ts",
|
|
15
|
+
"types": "./lib/index.d.ts",
|
|
15
16
|
"import": "./lib/index.js"
|
|
16
17
|
}
|
|
17
18
|
},
|
|
@@ -74,18 +75,18 @@
|
|
|
74
75
|
"@libp2p/crypto": "^5.0.15",
|
|
75
76
|
"@libp2p/interface": "^2.7.0",
|
|
76
77
|
"@libp2p/peer-id": "^5.1.0",
|
|
77
|
-
"@lodestar/api": "1.36.0-dev.
|
|
78
|
-
"@lodestar/beacon-node": "1.36.0-dev.
|
|
78
|
+
"@lodestar/api": "1.36.0-dev.faac5550fb",
|
|
79
|
+
"@lodestar/beacon-node": "1.36.0-dev.faac5550fb",
|
|
79
80
|
"@lodestar/bun": "git+https://github.com/ChainSafe/lodestar-bun.git",
|
|
80
|
-
"@lodestar/config": "1.36.0-dev.
|
|
81
|
-
"@lodestar/db": "1.36.0-dev.
|
|
82
|
-
"@lodestar/light-client": "1.36.0-dev.
|
|
83
|
-
"@lodestar/logger": "1.36.0-dev.
|
|
84
|
-
"@lodestar/params": "1.36.0-dev.
|
|
85
|
-
"@lodestar/state-transition": "1.36.0-dev.
|
|
86
|
-
"@lodestar/types": "1.36.0-dev.
|
|
87
|
-
"@lodestar/utils": "1.36.0-dev.
|
|
88
|
-
"@lodestar/validator": "1.36.0-dev.
|
|
81
|
+
"@lodestar/config": "1.36.0-dev.faac5550fb",
|
|
82
|
+
"@lodestar/db": "1.36.0-dev.faac5550fb",
|
|
83
|
+
"@lodestar/light-client": "1.36.0-dev.faac5550fb",
|
|
84
|
+
"@lodestar/logger": "1.36.0-dev.faac5550fb",
|
|
85
|
+
"@lodestar/params": "1.36.0-dev.faac5550fb",
|
|
86
|
+
"@lodestar/state-transition": "1.36.0-dev.faac5550fb",
|
|
87
|
+
"@lodestar/types": "1.36.0-dev.faac5550fb",
|
|
88
|
+
"@lodestar/utils": "1.36.0-dev.faac5550fb",
|
|
89
|
+
"@lodestar/validator": "1.36.0-dev.faac5550fb",
|
|
89
90
|
"@multiformats/multiaddr": "^12.1.3",
|
|
90
91
|
"deepmerge": "^4.3.1",
|
|
91
92
|
"ethers": "^6.7.0",
|
|
@@ -100,12 +101,12 @@
|
|
|
100
101
|
"yargs": "^17.7.1"
|
|
101
102
|
},
|
|
102
103
|
"devDependencies": {
|
|
103
|
-
"@lodestar/test-utils": "1.36.0-dev.
|
|
104
|
+
"@lodestar/test-utils": "1.36.0-dev.faac5550fb",
|
|
104
105
|
"@types/debug": "^4.1.7",
|
|
105
106
|
"@types/inquirer": "^9.0.3",
|
|
106
107
|
"@types/proper-lockfile": "^4.1.4",
|
|
107
108
|
"@types/yargs": "^17.0.24",
|
|
108
109
|
"fastify": "^5.2.1"
|
|
109
110
|
},
|
|
110
|
-
"gitHead": "
|
|
111
|
+
"gitHead": "b411ee6055e18b5509edc469f1af85e67497ec27"
|
|
111
112
|
}
|
|
@@ -7,7 +7,7 @@ import {ChainForkConfig, createBeaconConfig} from "@lodestar/config";
|
|
|
7
7
|
import {LevelDbController} from "@lodestar/db/controller/level";
|
|
8
8
|
import {LoggerNode, getNodeLogger} from "@lodestar/logger/node";
|
|
9
9
|
import {ACTIVE_PRESET, PresetName} from "@lodestar/params";
|
|
10
|
-
import {ErrorAborted, bytesToInt} from "@lodestar/utils";
|
|
10
|
+
import {ErrorAborted, bytesToInt, formatBytes} from "@lodestar/utils";
|
|
11
11
|
import {ProcessShutdownCallback} from "@lodestar/validator";
|
|
12
12
|
import {BeaconNodeOptions, getBeaconConfigFromArgs} from "../../config/index.js";
|
|
13
13
|
import {getNetworkBootnodes, getNetworkData, isKnownNetworkName, readBootnodes} from "../../networks/index.js";
|
|
@@ -44,7 +44,7 @@ export async function beaconHandler(args: BeaconArgs & GlobalArgs): Promise<void
|
|
|
44
44
|
const heapSizeLimit = getHeapStatistics().heap_size_limit;
|
|
45
45
|
if (heapSizeLimit < EIGHT_GB) {
|
|
46
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.`
|
|
47
|
+
`Node.js heap size limit is too low at ${formatBytes(heapSizeLimit)}, consider increasing it to at least ${formatBytes(EIGHT_GB)}. See https://chainsafe.github.io/lodestar/faqs/#running-a-beacon-node for more details.`
|
|
48
48
|
);
|
|
49
49
|
}
|
|
50
50
|
|
|
@@ -70,9 +70,10 @@ export async function beaconHandler(args: BeaconArgs & GlobalArgs): Promise<void
|
|
|
70
70
|
|
|
71
71
|
// BeaconNode setup
|
|
72
72
|
try {
|
|
73
|
-
const {anchorState, wsCheckpoint} = await initBeaconState(
|
|
73
|
+
const {anchorState, isFinalized, wsCheckpoint} = await initBeaconState(
|
|
74
74
|
options,
|
|
75
75
|
args,
|
|
76
|
+
beaconPaths.dataDir,
|
|
76
77
|
config,
|
|
77
78
|
db,
|
|
78
79
|
logger,
|
|
@@ -89,6 +90,7 @@ export async function beaconHandler(args: BeaconArgs & GlobalArgs): Promise<void
|
|
|
89
90
|
dataDir: beaconPaths.dataDir,
|
|
90
91
|
peerStoreDir: beaconPaths.peerStoreDir,
|
|
91
92
|
anchorState,
|
|
93
|
+
isAnchorStateFinalized: isFinalized,
|
|
92
94
|
wsCheckpoint,
|
|
93
95
|
});
|
|
94
96
|
|
|
@@ -143,7 +145,9 @@ export async function beaconHandler(args: BeaconArgs & GlobalArgs): Promise<void
|
|
|
143
145
|
// See https://github.com/ChainSafe/lodestar/issues/5642
|
|
144
146
|
process.exit(0);
|
|
145
147
|
} catch (e) {
|
|
146
|
-
|
|
148
|
+
// If we start from unfinalized state, we don't have checkpoint state so there is this error
|
|
149
|
+
// "No state in cache for finalized checkpoint state epoch"
|
|
150
|
+
logger.warn("Error closing beacon node", {}, e as Error);
|
|
147
151
|
// Make sure db is always closed gracefully
|
|
148
152
|
await db.close();
|
|
149
153
|
// Must explicitly exit process due to potential active handles
|
|
@@ -185,10 +189,6 @@ export async function beaconHandlerInit(args: BeaconArgs & GlobalArgs) {
|
|
|
185
189
|
// Add detailed version string for API node/version endpoint
|
|
186
190
|
beaconNodeOptions.set({api: {commit, version}});
|
|
187
191
|
|
|
188
|
-
if (args.supernode) {
|
|
189
|
-
beaconNodeOptions.set({chain: {supernode: true}, network: {supernode: true}});
|
|
190
|
-
}
|
|
191
|
-
|
|
192
192
|
// Set known depositContractDeployBlock
|
|
193
193
|
if (isKnownNetworkName(network)) {
|
|
194
194
|
const {depositContractDeployBlock} = getNetworkData(network);
|
|
@@ -211,7 +211,7 @@ export async function beaconHandlerInit(args: BeaconArgs & GlobalArgs) {
|
|
|
211
211
|
beaconNodeOptions.set({network: {discv5: {bootEnrs: [...new Set(bootnodes)]}}});
|
|
212
212
|
}
|
|
213
213
|
|
|
214
|
-
beaconNodeOptions.set({chain: {initialCustodyGroupCount: getInitialCustodyGroupCount(args, config, enr)}});
|
|
214
|
+
beaconNodeOptions.set({chain: {initialCustodyGroupCount: getInitialCustodyGroupCount(args, config, logger, enr)}});
|
|
215
215
|
|
|
216
216
|
if (args.disableLightClientServer) {
|
|
217
217
|
beaconNodeOptions.set({chain: {disableLightClientServer: true}});
|
|
@@ -255,7 +255,12 @@ export function initLogger(
|
|
|
255
255
|
return logger;
|
|
256
256
|
}
|
|
257
257
|
|
|
258
|
-
function getInitialCustodyGroupCount(
|
|
258
|
+
function getInitialCustodyGroupCount(
|
|
259
|
+
args: BeaconArgs & GlobalArgs,
|
|
260
|
+
config: ChainForkConfig,
|
|
261
|
+
logger: LoggerNode,
|
|
262
|
+
enr: SignableENR
|
|
263
|
+
): number {
|
|
259
264
|
if (args.supernode) {
|
|
260
265
|
return config.NUMBER_OF_CUSTODY_GROUPS;
|
|
261
266
|
}
|
|
@@ -263,5 +268,15 @@ function getInitialCustodyGroupCount(args: BeaconArgs & GlobalArgs, config: Chai
|
|
|
263
268
|
const enrCgcBytes = enr.kvs.get("cgc");
|
|
264
269
|
const enrCgc = enrCgcBytes != null ? bytesToInt(enrCgcBytes, "be") : 0;
|
|
265
270
|
|
|
271
|
+
if (args.semiSupernode) {
|
|
272
|
+
const semiSupernodeCgc = Math.floor(config.NUMBER_OF_CUSTODY_GROUPS / 2);
|
|
273
|
+
if (enrCgc > semiSupernodeCgc) {
|
|
274
|
+
logger.warn(
|
|
275
|
+
`Reducing custody requirements is not supported, will continue to use custody group count of ${enrCgc}`
|
|
276
|
+
);
|
|
277
|
+
}
|
|
278
|
+
return Math.max(enrCgc, semiSupernodeCgc);
|
|
279
|
+
}
|
|
280
|
+
|
|
266
281
|
return Math.max(enrCgc, config.CUSTODY_REQUIREMENT);
|
|
267
282
|
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
|
+
DbCPStateDatastore,
|
|
3
|
+
FileCPStateDatastore,
|
|
2
4
|
IBeaconDb,
|
|
3
5
|
IBeaconNodeOptions,
|
|
4
6
|
checkAndPersistAnchorState,
|
|
@@ -8,6 +10,8 @@ import {
|
|
|
8
10
|
import {BeaconConfig, ChainForkConfig, createBeaconConfig} from "@lodestar/config";
|
|
9
11
|
import {
|
|
10
12
|
BeaconStateAllForks,
|
|
13
|
+
computeAnchorCheckpoint,
|
|
14
|
+
computeEpochAtSlot,
|
|
11
15
|
ensureWithinWeakSubjectivityPeriod,
|
|
12
16
|
isWithinWeakSubjectivityPeriod,
|
|
13
17
|
loadState,
|
|
@@ -35,8 +39,9 @@ async function initAndVerifyWeakSubjectivityState(
|
|
|
35
39
|
logger: Logger,
|
|
36
40
|
dbStateBytes: StateWithBytes,
|
|
37
41
|
wsStateBytes: StateWithBytes,
|
|
42
|
+
isWsStateFinalized: boolean,
|
|
38
43
|
wsCheckpoint: Checkpoint,
|
|
39
|
-
opts: {ignoreWeakSubjectivityCheck?: boolean} = {}
|
|
44
|
+
opts: {forceCheckpointSync?: boolean; ignoreWeakSubjectivityCheck?: boolean} = {}
|
|
40
45
|
): Promise<{anchorState: BeaconStateAllForks; wsCheckpoint: Checkpoint}> {
|
|
41
46
|
const dbState = dbStateBytes.state;
|
|
42
47
|
const wsState = wsStateBytes.state;
|
|
@@ -54,7 +59,7 @@ async function initAndVerifyWeakSubjectivityState(
|
|
|
54
59
|
let anchorState = wsStateBytes;
|
|
55
60
|
let anchorCheckpoint = wsCheckpoint;
|
|
56
61
|
let isCheckpointState = true;
|
|
57
|
-
if (dbState.slot > wsState.slot) {
|
|
62
|
+
if (dbState.slot > wsState.slot && !opts.forceCheckpointSync) {
|
|
58
63
|
anchorState = dbStateBytes;
|
|
59
64
|
anchorCheckpoint = getCheckpointFromState(dbState);
|
|
60
65
|
isCheckpointState = false;
|
|
@@ -71,10 +76,12 @@ async function initAndVerifyWeakSubjectivityState(
|
|
|
71
76
|
throw wssCheck.err;
|
|
72
77
|
}
|
|
73
78
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
79
|
+
if (isWsStateFinalized) {
|
|
80
|
+
await checkAndPersistAnchorState(config, db, logger, anchorState.state, anchorState.stateBytes, {
|
|
81
|
+
isWithinWeakSubjectivityPeriod,
|
|
82
|
+
isCheckpointState,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
78
85
|
|
|
79
86
|
// Return the latest anchorState but still return original wsCheckpoint to validate in backfill
|
|
80
87
|
return {anchorState: anchorState.state, wsCheckpoint};
|
|
@@ -88,16 +95,21 @@ async function initAndVerifyWeakSubjectivityState(
|
|
|
88
95
|
* 2. restore from db
|
|
89
96
|
* 3. restore from genesis state (possibly downloaded via URL)
|
|
90
97
|
* 4. create genesis state from eth1
|
|
98
|
+
*
|
|
99
|
+
* The returned anchorState could be finalized or not.
|
|
100
|
+
* - if we load from checkpointState, checkpointSyncUrl, genesisStateFile or archived db, it is finalized
|
|
101
|
+
* - it's not finalized if we load from unsafeCheckpointState or lastPersistedCheckpointState
|
|
91
102
|
*/
|
|
92
103
|
export async function initBeaconState(
|
|
93
104
|
options: IBeaconNodeOptions,
|
|
94
105
|
args: BeaconArgs & GlobalArgs,
|
|
106
|
+
dataDir: string,
|
|
95
107
|
chainForkConfig: ChainForkConfig,
|
|
96
108
|
db: IBeaconDb,
|
|
97
109
|
logger: Logger,
|
|
98
110
|
signal: AbortSignal
|
|
99
|
-
): Promise<{anchorState: BeaconStateAllForks; wsCheckpoint?: Checkpoint}> {
|
|
100
|
-
if (args.forceCheckpointSync && !(args.checkpointState || args.checkpointSyncUrl)) {
|
|
111
|
+
): Promise<{anchorState: BeaconStateAllForks; isFinalized: boolean; wsCheckpoint?: Checkpoint}> {
|
|
112
|
+
if (args.forceCheckpointSync && !(args.checkpointState || args.checkpointSyncUrl || args.unsafeCheckpointState)) {
|
|
101
113
|
throw new Error("Forced checkpoint sync without specifying a checkpointState or checkpointSyncUrl");
|
|
102
114
|
}
|
|
103
115
|
// fetch the latest state stored in the db which will be used in all cases, if it exists, either
|
|
@@ -119,6 +131,8 @@ export async function initBeaconState(
|
|
|
119
131
|
}
|
|
120
132
|
|
|
121
133
|
if (lastDbState) {
|
|
134
|
+
// state from archive db is finalized
|
|
135
|
+
const isFinalized = true;
|
|
122
136
|
const config = createBeaconConfig(chainForkConfig, lastDbState.genesisValidatorsRoot);
|
|
123
137
|
const wssCheck = isWithinWeakSubjectivityPeriod(config, lastDbState, getCheckpointFromState(lastDbState));
|
|
124
138
|
|
|
@@ -136,7 +150,13 @@ export async function initBeaconState(
|
|
|
136
150
|
// All cases when we want to directly use lastDbState as the anchor state:
|
|
137
151
|
// - if no checkpoint sync args provided, or
|
|
138
152
|
// - the lastDbState is within weak subjectivity period:
|
|
139
|
-
if (
|
|
153
|
+
if (
|
|
154
|
+
(!args.checkpointState &&
|
|
155
|
+
!args.checkpointSyncUrl &&
|
|
156
|
+
!args.unsafeCheckpointState &&
|
|
157
|
+
!args.lastPersistedCheckpointState) ||
|
|
158
|
+
wssCheck
|
|
159
|
+
) {
|
|
140
160
|
if (stateBytes === null) {
|
|
141
161
|
// this never happens
|
|
142
162
|
throw Error(`There is no stateBytes for the lastDbState at slot ${lastDbState.slot}`);
|
|
@@ -145,45 +165,151 @@ export async function initBeaconState(
|
|
|
145
165
|
isWithinWeakSubjectivityPeriod: wssCheck,
|
|
146
166
|
isCheckpointState: false,
|
|
147
167
|
});
|
|
148
|
-
|
|
168
|
+
logger.info("Initialized state from db", {
|
|
169
|
+
slot: lastDbState.slot,
|
|
170
|
+
epoch: computeEpochAtSlot(lastDbState.slot),
|
|
171
|
+
stateRoot: toRootHex(lastDbState.hashTreeRoot()),
|
|
172
|
+
isFinalized,
|
|
173
|
+
});
|
|
174
|
+
return {anchorState: lastDbState, isFinalized};
|
|
149
175
|
}
|
|
150
176
|
}
|
|
151
177
|
}
|
|
152
178
|
|
|
153
179
|
// See if we can sync state using checkpoint sync args or else start from genesis
|
|
154
180
|
if (args.checkpointState) {
|
|
155
|
-
|
|
181
|
+
// state is trusted to be finalized
|
|
182
|
+
const isFinalized = true;
|
|
183
|
+
logger.info("Loading checkpoint state", {checkpointState: args.checkpointState});
|
|
184
|
+
const stateBytes = await downloadOrLoadFile(args.checkpointState);
|
|
185
|
+
logger.info("Loaded checkpoint state", {
|
|
186
|
+
size: formatBytes(stateBytes.length),
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
const stateAndCp = await readWSState(
|
|
156
190
|
lastDbStateWithBytes,
|
|
157
191
|
lastDbValidatorsBytes,
|
|
158
192
|
{
|
|
159
|
-
|
|
193
|
+
stateBytes,
|
|
194
|
+
isFinalized,
|
|
160
195
|
wssCheckpoint: args.wssCheckpoint,
|
|
196
|
+
forceCheckpointSync: args.forceCheckpointSync,
|
|
161
197
|
ignoreWeakSubjectivityCheck: args.ignoreWeakSubjectivityCheck,
|
|
162
198
|
},
|
|
163
199
|
chainForkConfig,
|
|
164
200
|
db,
|
|
165
201
|
logger
|
|
166
202
|
);
|
|
203
|
+
|
|
204
|
+
const {checkpoint} = computeAnchorCheckpoint(chainForkConfig, stateAndCp.anchorState);
|
|
205
|
+
|
|
206
|
+
logger.info("Initialized checkpoint state", {
|
|
207
|
+
slot: stateAndCp.anchorState.slot,
|
|
208
|
+
epoch: checkpoint.epoch,
|
|
209
|
+
checkpointRoot: toRootHex(checkpoint.root),
|
|
210
|
+
isFinalized,
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
return {...stateAndCp, isFinalized};
|
|
167
214
|
}
|
|
168
215
|
|
|
169
216
|
if (args.checkpointSyncUrl) {
|
|
170
|
-
|
|
217
|
+
// state is trusted to be finalized
|
|
218
|
+
const isFinalized = true;
|
|
219
|
+
const stateAndCp = await fetchWSStateFromBeaconApi(
|
|
171
220
|
lastDbStateWithBytes,
|
|
172
221
|
lastDbValidatorsBytes,
|
|
173
222
|
{
|
|
174
223
|
checkpointSyncUrl: args.checkpointSyncUrl,
|
|
175
224
|
wssCheckpoint: args.wssCheckpoint,
|
|
225
|
+
forceCheckpointSync: args.forceCheckpointSync,
|
|
176
226
|
ignoreWeakSubjectivityCheck: args.ignoreWeakSubjectivityCheck,
|
|
177
227
|
},
|
|
178
228
|
chainForkConfig,
|
|
179
229
|
db,
|
|
180
230
|
logger
|
|
181
231
|
);
|
|
232
|
+
|
|
233
|
+
const {checkpoint} = computeAnchorCheckpoint(chainForkConfig, stateAndCp.anchorState);
|
|
234
|
+
|
|
235
|
+
logger.info("Initialized checkpoint state", {
|
|
236
|
+
slot: stateAndCp.anchorState.slot,
|
|
237
|
+
epoch: checkpoint.epoch,
|
|
238
|
+
checkpointRoot: toRootHex(checkpoint.root),
|
|
239
|
+
isFinalized,
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
return {...stateAndCp, isFinalized};
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
if (args.unsafeCheckpointState || args.lastPersistedCheckpointState) {
|
|
246
|
+
// state is supposed to be not yet finalized
|
|
247
|
+
const isFinalized = false;
|
|
248
|
+
let stateBytes: Uint8Array | null = null;
|
|
249
|
+
// prioritize lastPersistedCheckpointState over unsafeCheckpointState, unless forceCheckpointSync is set
|
|
250
|
+
if (args.lastPersistedCheckpointState && !args.forceCheckpointSync) {
|
|
251
|
+
// find the last persisted checkpoint state to load
|
|
252
|
+
const cpDataStore = args["chain.nHistoricalStatesFileDataStore"]
|
|
253
|
+
? new FileCPStateDatastore(dataDir)
|
|
254
|
+
: new DbCPStateDatastore(db);
|
|
255
|
+
logger.verbose(`Finding last persisted checkpoint state from ${cpDataStore.constructor.name}`);
|
|
256
|
+
stateBytes = await cpDataStore.readLatestSafe();
|
|
257
|
+
if (stateBytes === null) {
|
|
258
|
+
logger.warn("Last persisted checkpoint state not found");
|
|
259
|
+
} else {
|
|
260
|
+
logger.info("Found last persisted checkpoint state", {size: formatBytes(stateBytes.length)});
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
if (stateBytes === null && args.unsafeCheckpointState) {
|
|
265
|
+
logger.info("Loading checkpoint state", {unsafeCheckpointState: args.unsafeCheckpointState});
|
|
266
|
+
stateBytes = await downloadOrLoadFile(args.unsafeCheckpointState);
|
|
267
|
+
logger.info("Loaded checkpoint state", {
|
|
268
|
+
size: formatBytes(stateBytes.length),
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
if (stateBytes !== null) {
|
|
273
|
+
logger.warn(
|
|
274
|
+
"Initializing from unfinalized checkpoint state is unsafe and may cause the node to follow a minority chain"
|
|
275
|
+
);
|
|
276
|
+
const stateAndCp = await readWSState(
|
|
277
|
+
lastDbStateWithBytes,
|
|
278
|
+
lastDbValidatorsBytes,
|
|
279
|
+
{
|
|
280
|
+
stateBytes,
|
|
281
|
+
isFinalized,
|
|
282
|
+
wssCheckpoint: args.wssCheckpoint,
|
|
283
|
+
forceCheckpointSync: args.forceCheckpointSync,
|
|
284
|
+
ignoreWeakSubjectivityCheck: args.ignoreWeakSubjectivityCheck,
|
|
285
|
+
},
|
|
286
|
+
chainForkConfig,
|
|
287
|
+
db,
|
|
288
|
+
logger
|
|
289
|
+
);
|
|
290
|
+
|
|
291
|
+
const lastProcessedSlot = stateAndCp.anchorState.latestBlockHeader.slot;
|
|
292
|
+
const {checkpoint} = computeAnchorCheckpoint(chainForkConfig, stateAndCp.anchorState);
|
|
293
|
+
|
|
294
|
+
logger.info("Initialized checkpoint state", {
|
|
295
|
+
slot: stateAndCp.anchorState.slot,
|
|
296
|
+
epoch: checkpoint.epoch,
|
|
297
|
+
checkpointRoot: toRootHex(checkpoint.root),
|
|
298
|
+
lastProcessedSlot,
|
|
299
|
+
isFinalized,
|
|
300
|
+
});
|
|
301
|
+
|
|
302
|
+
return {...stateAndCp, isFinalized};
|
|
303
|
+
}
|
|
182
304
|
}
|
|
183
305
|
|
|
184
306
|
const genesisStateFile = args.genesisStateFile || getGenesisFileUrl(args.network || defaultNetwork);
|
|
185
307
|
if (genesisStateFile && !args.forceGenesis) {
|
|
308
|
+
// genesis state is considered finalized
|
|
309
|
+
const isFinalized = true;
|
|
310
|
+
logger.info("Loading genesis state", {genesisStateFile});
|
|
186
311
|
let stateBytes = await downloadOrLoadFile(genesisStateFile);
|
|
312
|
+
logger.info("Loaded genesis state", {size: formatBytes(stateBytes.length)});
|
|
187
313
|
// Convert to `Uint8Array` to avoid unexpected behavior such as `Buffer.prototype.slice` not copying memory
|
|
188
314
|
stateBytes = new Uint8Array(stateBytes.buffer, stateBytes.byteOffset, stateBytes.byteLength);
|
|
189
315
|
const anchorState = getStateTypeFromBytes(chainForkConfig, stateBytes).deserializeToViewDU(stateBytes);
|
|
@@ -199,18 +325,29 @@ export async function initBeaconState(
|
|
|
199
325
|
isWithinWeakSubjectivityPeriod: wssCheck,
|
|
200
326
|
isCheckpointState: true,
|
|
201
327
|
});
|
|
202
|
-
|
|
328
|
+
logger.info("Initialized genesis state", {
|
|
329
|
+
slot: anchorState.slot,
|
|
330
|
+
stateRoot,
|
|
331
|
+
isFinalized,
|
|
332
|
+
});
|
|
333
|
+
return {anchorState, isFinalized};
|
|
203
334
|
}
|
|
204
335
|
|
|
205
336
|
// Only place we will not bother checking isWithinWeakSubjectivityPeriod as forceGenesis passed by user
|
|
206
337
|
const anchorState = await initStateFromEth1({config: chainForkConfig, db, logger, opts: options.eth1, signal});
|
|
207
|
-
return {anchorState};
|
|
338
|
+
return {anchorState, isFinalized: true};
|
|
208
339
|
}
|
|
209
340
|
|
|
210
341
|
async function readWSState(
|
|
211
342
|
lastDbStateBytes: StateWithBytes | null,
|
|
212
343
|
lastDbValidatorsBytes: Uint8Array | null,
|
|
213
|
-
wssOpts: {
|
|
344
|
+
wssOpts: {
|
|
345
|
+
stateBytes: Uint8Array;
|
|
346
|
+
isFinalized: boolean;
|
|
347
|
+
wssCheckpoint?: string;
|
|
348
|
+
forceCheckpointSync?: boolean;
|
|
349
|
+
ignoreWeakSubjectivityCheck?: boolean;
|
|
350
|
+
},
|
|
214
351
|
chainForkConfig: ChainForkConfig,
|
|
215
352
|
db: IBeaconDb,
|
|
216
353
|
logger: Logger
|
|
@@ -218,10 +355,9 @@ async function readWSState(
|
|
|
218
355
|
// weak subjectivity sync from a provided state file:
|
|
219
356
|
// if a weak subjectivity checkpoint has been provided, it is used for additional verification
|
|
220
357
|
// otherwise, the state itself is used for verification (not bad, because the trusted state has been explicitly provided)
|
|
221
|
-
const {
|
|
358
|
+
const {stateBytes, isFinalized, wssCheckpoint, forceCheckpointSync, ignoreWeakSubjectivityCheck} = wssOpts;
|
|
222
359
|
const lastDbState = lastDbStateBytes?.state ?? null;
|
|
223
360
|
|
|
224
|
-
const stateBytes = await downloadOrLoadFile(checkpointState);
|
|
225
361
|
let wsState: BeaconStateAllForks;
|
|
226
362
|
if (lastDbState && lastDbValidatorsBytes) {
|
|
227
363
|
// use lastDbState to load wsState if possible to share the same state tree
|
|
@@ -233,7 +369,8 @@ async function readWSState(
|
|
|
233
369
|
const wsStateBytes = {state: wsState, stateBytes};
|
|
234
370
|
const store = lastDbStateBytes ?? wsStateBytes;
|
|
235
371
|
const checkpoint = wssCheckpoint ? getCheckpointFromArg(wssCheckpoint) : getCheckpointFromState(wsState);
|
|
236
|
-
return initAndVerifyWeakSubjectivityState(config, db, logger, store, wsStateBytes, checkpoint, {
|
|
372
|
+
return initAndVerifyWeakSubjectivityState(config, db, logger, store, wsStateBytes, isFinalized, checkpoint, {
|
|
373
|
+
forceCheckpointSync,
|
|
237
374
|
ignoreWeakSubjectivityCheck,
|
|
238
375
|
});
|
|
239
376
|
}
|
|
@@ -241,7 +378,12 @@ async function readWSState(
|
|
|
241
378
|
async function fetchWSStateFromBeaconApi(
|
|
242
379
|
lastDbStateBytes: StateWithBytes | null,
|
|
243
380
|
lastDbValidatorsBytes: Uint8Array | null,
|
|
244
|
-
wssOpts: {
|
|
381
|
+
wssOpts: {
|
|
382
|
+
checkpointSyncUrl: string;
|
|
383
|
+
wssCheckpoint?: string;
|
|
384
|
+
forceCheckpointSync?: boolean;
|
|
385
|
+
ignoreWeakSubjectivityCheck?: boolean;
|
|
386
|
+
},
|
|
245
387
|
chainForkConfig: ChainForkConfig,
|
|
246
388
|
db: IBeaconDb,
|
|
247
389
|
logger: Logger
|
|
@@ -269,7 +411,10 @@ async function fetchWSStateFromBeaconApi(
|
|
|
269
411
|
const config = createBeaconConfig(chainForkConfig, wsState.genesisValidatorsRoot);
|
|
270
412
|
const wsStateWithBytes = {state: wsState, stateBytes: wsStateBytes};
|
|
271
413
|
const store = lastDbStateBytes ?? wsStateWithBytes;
|
|
272
|
-
|
|
414
|
+
// a fetched ws state is trusted to be finalized
|
|
415
|
+
const isFinalized = true;
|
|
416
|
+
return initAndVerifyWeakSubjectivityState(config, db, logger, store, wsStateWithBytes, isFinalized, wsCheckpoint, {
|
|
417
|
+
forceCheckpointSync: wssOpts.forceCheckpointSync,
|
|
273
418
|
ignoreWeakSubjectivityCheck: wssOpts.ignoreWeakSubjectivityCheck,
|
|
274
419
|
});
|
|
275
420
|
}
|