@chainsafe/lodestar 1.36.0-dev.f259361847 → 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.
Files changed (38) hide show
  1. package/.git-data.json +1 -1
  2. package/lib/cmds/beacon/handler.d.ts.map +1 -1
  3. package/lib/cmds/beacon/handler.js +14 -7
  4. package/lib/cmds/beacon/handler.js.map +1 -1
  5. package/lib/cmds/beacon/initBeaconState.d.ts +6 -1
  6. package/lib/cmds/beacon/initBeaconState.d.ts.map +1 -1
  7. package/lib/cmds/beacon/initBeaconState.js +126 -21
  8. package/lib/cmds/beacon/initBeaconState.js.map +1 -1
  9. package/lib/cmds/beacon/options.d.ts +2 -0
  10. package/lib/cmds/beacon/options.d.ts.map +1 -1
  11. package/lib/cmds/beacon/options.js +13 -1
  12. package/lib/cmds/beacon/options.js.map +1 -1
  13. package/lib/cmds/dev/options.d.ts +1 -0
  14. package/lib/cmds/dev/options.d.ts.map +1 -1
  15. package/lib/options/beaconNodeOptions/chain.d.ts +1 -0
  16. package/lib/options/beaconNodeOptions/chain.d.ts.map +1 -1
  17. package/lib/options/beaconNodeOptions/chain.js +8 -1
  18. package/lib/options/beaconNodeOptions/chain.js.map +1 -1
  19. package/lib/options/beaconNodeOptions/index.d.ts +1 -0
  20. package/lib/options/beaconNodeOptions/index.d.ts.map +1 -1
  21. package/lib/options/globalOptions.d.ts +2 -0
  22. package/lib/options/globalOptions.d.ts.map +1 -1
  23. package/lib/options/globalOptions.js +6 -0
  24. package/lib/options/globalOptions.js.map +1 -1
  25. package/lib/util/file.d.ts.map +1 -1
  26. package/lib/util/file.js +4 -1
  27. package/lib/util/file.js.map +1 -1
  28. package/lib/util/hasher_bun.d.ts.map +1 -1
  29. package/lib/util/hasher_bun.js +2 -1
  30. package/lib/util/hasher_bun.js.map +1 -1
  31. package/package.json +15 -14
  32. package/src/cmds/beacon/handler.ts +23 -8
  33. package/src/cmds/beacon/initBeaconState.ts +166 -21
  34. package/src/cmds/beacon/options.ts +17 -1
  35. package/src/options/beaconNodeOptions/chain.ts +10 -1
  36. package/src/options/globalOptions.ts +9 -0
  37. package/src/util/file.ts +4 -1
  38. package/src/util/hasher_bun.ts +3 -1
@@ -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;CACrB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,WAAuB,CAAC;AA4CrD,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"}
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;AAY9D,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;KAChB;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"}
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"}
@@ -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,CAU/E"}
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/util/file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAC,QAAQ,EAAC,MAAM,aAAa,CAAC;AACrC,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAE1C,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAC,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAEtC,MAAM,EAAC,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAC,GAAG,IAAI,CAAC;AAEjD,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAC;AAE9B,MAAM,CAAC,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC;IAC/C,QAAQ,EAAE;QACR,IAAI,IAAI,CAAC,uBAAuB,EAAE;YAChC,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,SAAS,SAAS,CAAC,IAAI;gBAChC,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACnC,CAAC;SACF,CAAC;KACH;CACF,CAAC,CAAC;AAEH,MAAM,CAAN,IAAY,UAKX;AALD,WAAY,UAAU;IACpB,2BAAa,CAAA;IACb,2BAAa,CAAA;IACb,yBAAW,CAAA;IACX,2BAAa,CAAA;AACf,CAAC,EALW,UAAU,KAAV,UAAU,QAKrB;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAI,QAAgB,EAAE,UAAsB;IAC/D,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,UAAU,CAAC,IAAI;YAClB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAM,CAAC;QACnC,KAAK,UAAU,CAAC,IAAI,CAAC;QACrB,KAAK,UAAU,CAAC,GAAG;YACjB,OAAO,IAAI,CAAC,QAAQ,EAAE,EAAC,MAAM,EAAE,UAAU,EAAC,CAAM,CAAC;QACnD;YACE,OAAO,QAAwB,CAAC;IACpC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,GAAY,EAAE,UAAsB;IAC5D,IAAI,QAAgB,CAAC;IACrB,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,UAAU,CAAC,IAAI;YAClB,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACxC,MAAM;QACR,KAAK,UAAU,CAAC,IAAI,CAAC;QACrB,KAAK,UAAU,CAAC,GAAG;YACjB,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,MAAM,EAAE,UAAU,EAAC,CAAC,CAAC;YAC3C,MAAM;QACR;YACE,QAAQ,GAAG,GAAa,CAAC;IAC7B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,QAAgB,EAAE,GAAY,EAAE,UAA+B,OAAO;IAC9F,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACpD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,UAAwB,CAAC,EAAE,OAAO,CAAC,CAAC;AAChH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,GAAY,EAAE,OAA6B;IAC5F,SAAS,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAClC,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AACjC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAI,QAAgB,EAAE,eAA0B;IACtE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACpD,IAAI,eAAe,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;IACpH,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpD,OAAO,KAAK,CAAC,QAAQ,EAAE,UAAwB,CAAC,CAAC;AACnD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAI,QAAgB,EAAE,eAA0B;IAC9E,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAK,CAAoB,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,CAAC,CAAC;IACV,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,QAAgB,EAAE,YAAoB;IAC7E,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QACxB,MAAM,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC9B,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB,EAAE,GAAW;IAC9D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,KAAK,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1F,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAqC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,SAAiB;IACxD,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,gCAAgC,SAAS,KAAK,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QAChG,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;QAC5C,OAAO,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,SAAS,KAAK,CAAC,SAAiB;IAC9B,OAAO,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC"}
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;AAsB3C,eAAO,MAAM,MAAM,EAAE,MAsEpB,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"}
@@ -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 { digest2Bytes32, digest2Bytes32Into, hashInto } from "@lodestar/bun";
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,MAAM,eAAe,CAAC;AAE3E;;;;;GAKG;AACH,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,MAAM,cAAc,GAAG,eAAe,GAAG,EAAE,CAAC;AAC5C,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC;AAClD,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACvD,MAAM,WAAW,GAAG,IAAI,UAAU,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC;AACzD,uDAAuD;AACvD,4DAA4D;AAC5D,4CAA4C;AAC5C,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/C,MAAM,YAAY,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACjD,yEAAyE;AACzE,MAAM,SAAS,GAAW,IAAI,KAAK,CAAO,eAAe,CAAC,CAAC;AAE3D,MAAM,CAAC,MAAM,MAAM,GAAW;IAC5B,IAAI,EAAE,cAAc;IACpB,QAAQ;IACR,QAAQ,CAAC,IAAgB,EAAE,IAAgB;QACzC,OAAO,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC;IACD,YAAY,EAAE,CAAC,IAAgB,EAAE,IAAgB,EAAE,MAAkB,EAAQ,EAAE;QAC7E,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IACD,mBAAmB,CAAC,IAAgB,EAAE,KAAiB,EAAE,MAAkB;QACzE,wBAAwB,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;QACnD,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QACpC,uBAAuB,CAAC,YAAY,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;IACD,oBAAoB,CAAC,WAAuB,EAAE,MAAc,EAAE,MAAkB,EAAE,MAAc;QAC9F,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACxE,CAAC;IACD,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC5D,qBAAqB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC1F,CAAC;IACD,YAAY,CAAC,IAAgB,EAAE,MAAc;QAC3C,OAAO,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IACD,uBAAuB,CAAC,gBAAwC;QAC9D,KAAK,IAAI,KAAK,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YAClE,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,oBAAoB;gBACpB,MAAM,KAAK,CAAC,kCAAkC,KAAK,EAAE,CAAC,CAAC;YACzD,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,kBAAkB;gBAClB,SAAS;YACX,CAAC;YAED,0DAA0D;YAC1D,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,KAAK,MAAM,EAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,IAAI,KAAK,EAAE,CAAC;gBACvC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC5B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,EAAE,CAAC,CAAC;gBAC3D,CAAC;gBACD,MAAM,YAAY,GAAG,CAAC,GAAG,eAAe,CAAC;gBACzC,MAAM,MAAM,GAAG,YAAY,GAAG,EAAE,CAAC;gBAEjC,uBAAuB,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;gBACnD,uBAAuB,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;gBACvD,SAAS,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;gBAC/B,IAAI,YAAY,KAAK,eAAe,GAAG,CAAC,EAAE,CAAC;oBACzC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;oBAClC,KAAK,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;wBAChD,uBAAuB,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;oBACzD,CAAC;gBACH,CAAC;gBACD,CAAC,EAAE,CAAC;YACN,CAAC;YAED,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,eAAe,CAAC;YACjD,oDAAoD;YACpD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;gBAClB,MAAM,cAAc,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,GAAG,EAAE,CAAC,CAAC;gBAC9D,MAAM,eAAe,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,GAAG,EAAE,CAAC,CAAC;gBAChE,QAAQ,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;gBAC1C,+BAA+B;gBAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;oBACnC,uBAAuB,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;CACF,CAAC;AAEF,SAAS,uBAAuB,CAAC,GAAe,EAAE,GAAgB,EAAE,MAAc;IAChF,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;IACrB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;IACzB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;IACzB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;IACzB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;IACzB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;IACzB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;IACzB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;AAC3B,CAAC;AAED,2DAA2D;AAC3D,SAAS,wBAAwB,CAAC,IAAgB,EAAE,IAAgB,EAAE,GAAgB;IACpF,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IACjB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IACjB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IACjB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IACjB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IACjB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IACjB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IACjB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IACjB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IACjB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IACjB,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IAClB,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IAClB,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IAClB,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IAClB,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IAClB,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;AACpB,CAAC"}
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.f259361847",
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.f259361847",
78
- "@lodestar/beacon-node": "1.36.0-dev.f259361847",
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.f259361847",
81
- "@lodestar/db": "1.36.0-dev.f259361847",
82
- "@lodestar/light-client": "1.36.0-dev.f259361847",
83
- "@lodestar/logger": "1.36.0-dev.f259361847",
84
- "@lodestar/params": "1.36.0-dev.f259361847",
85
- "@lodestar/state-transition": "1.36.0-dev.f259361847",
86
- "@lodestar/types": "1.36.0-dev.f259361847",
87
- "@lodestar/utils": "1.36.0-dev.f259361847",
88
- "@lodestar/validator": "1.36.0-dev.f259361847",
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.f259361847",
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": "45bf6147618a6996859bb0345ba6e09afb2f54df"
111
+ "gitHead": "b411ee6055e18b5509edc469f1af85e67497ec27"
111
112
  }
@@ -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
- logger.error("Error closing beacon node", {}, e as Error);
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(args: BeaconArgs & GlobalArgs, config: ChainForkConfig, enr: SignableENR): number {
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
- await checkAndPersistAnchorState(config, db, logger, anchorState.state, anchorState.stateBytes, {
75
- isWithinWeakSubjectivityPeriod,
76
- isCheckpointState,
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 ((!args.checkpointState && !args.checkpointSyncUrl) || wssCheck) {
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
- return {anchorState: lastDbState};
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
- return readWSState(
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
- checkpointState: args.checkpointState,
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
- return fetchWSStateFromBeaconApi(
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
- return {anchorState};
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: {checkpointState: string; wssCheckpoint?: string; ignoreWeakSubjectivityCheck?: boolean},
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 {checkpointState, wssCheckpoint, ignoreWeakSubjectivityCheck} = wssOpts;
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: {checkpointSyncUrl: string; wssCheckpoint?: string; ignoreWeakSubjectivityCheck?: boolean},
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
- return initAndVerifyWeakSubjectivityState(config, db, logger, store, wsStateWithBytes, wsCheckpoint, {
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
  }
@@ -10,6 +10,8 @@ type BeaconExtraArgs = {
10
10
  bootnodesFile?: string;
11
11
  checkpointSyncUrl?: string;
12
12
  checkpointState?: string;
13
+ unsafeCheckpointState?: string;
14
+ lastPersistedCheckpointState?: boolean;
13
15
  wssCheckpoint?: string;
14
16
  forceCheckpointSync?: boolean;
15
17
  ignoreWeakSubjectivityCheck?: boolean;
@@ -58,11 +60,25 @@ export const beaconExtraOptions: CliCommandOptions<BeaconExtraArgs> = {
58
60
  },
59
61
 
60
62
  checkpointState: {
61
- description: "Set a checkpoint state to start syncing from",
63
+ description: "File path or url to finalized checkpoint state to start syncing from",
62
64
  type: "string",
63
65
  group: "weak subjectivity",
64
66
  },
65
67
 
68
+ unsafeCheckpointState: {
69
+ hidden: true,
70
+ description: "File path or url to unfinalized checkpoint state to start syncing from",
71
+ type: "string",
72
+ group: "weak subjectivity",
73
+ },
74
+
75
+ lastPersistedCheckpointState: {
76
+ hidden: true,
77
+ description: "Use the last safe persisted checkpoint state to start syncing from",
78
+ type: "boolean",
79
+ group: "weak subjectivity",
80
+ },
81
+
66
82
  wssCheckpoint: {
67
83
  description:
68
84
  "Start beacon node off a state at the provided weak subjectivity checkpoint, to be supplied in <blockRoot>:<epoch> format. For example, 0x1234:100 will sync and start off from the weak subjectivity state at checkpoint of epoch 100 with block root 0x1234.",