@lodestar/beacon-node 1.50.0-dev.3579e999b5 → 1.50.0-dev.53ad0a2af7

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.
@@ -4,18 +4,11 @@ import { SignedBeaconBlock } from "@lodestar/types";
4
4
  import { Logger } from "@lodestar/utils";
5
5
  import { IBeaconDb } from "../db/index.js";
6
6
  import { Metrics } from "../metrics/index.js";
7
- export declare function persistAnchorState(config: ChainForkConfig, db: IBeaconDb, anchorState: BeaconStateAllForks, anchorStateBytes: Uint8Array): Promise<void>;
8
- export declare function createGenesisBlock(config: ChainForkConfig, genesisState: BeaconStateAllForks): SignedBeaconBlock;
7
+ export declare function persistAnchorState(config: ChainForkConfig, db: IBeaconDb, anchorState: IBeaconStateView, anchorStateBytes: Uint8Array): Promise<void>;
8
+ export declare function createGenesisBlock(config: ChainForkConfig, genesisState: IBeaconStateView): SignedBeaconBlock;
9
9
  /**
10
10
  * Restore the latest beacon state from db
11
11
  */
12
12
  export declare function initStateFromDb(config: ChainForkConfig, db: IBeaconDb, logger: Logger): Promise<BeaconStateAllForks>;
13
- /**
14
- * Initialize and persist an anchor state (either weak subjectivity or genesis)
15
- */
16
- export declare function checkAndPersistAnchorState(config: ChainForkConfig, db: IBeaconDb, logger: Logger, anchorState: BeaconStateAllForks, anchorStateBytes: Uint8Array, { isWithinWeakSubjectivityPeriod, isCheckpointState, }: {
17
- isWithinWeakSubjectivityPeriod: boolean;
18
- isCheckpointState: boolean;
19
- }): Promise<void>;
20
13
  export declare function initBeaconMetrics(metrics: Metrics, state: IBeaconStateView): void;
21
14
  //# sourceMappingURL=initState.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"initState.d.ts","sourceRoot":"","sources":["../../src/chain/initState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EACL,mBAAmB,EAEnB,gBAAgB,EAGjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAC,iBAAiB,EAAM,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAC,MAAM,EAAoC,MAAM,iBAAiB,CAAC;AAE1E,OAAO,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAC,OAAO,EAAC,MAAM,qBAAqB,CAAC;AAG5C,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,eAAe,EACvB,EAAE,EAAE,SAAS,EACb,WAAW,EAAE,mBAAmB,EAChC,gBAAgB,EAAE,UAAU,GAC3B,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,mBAAmB,GAAG,iBAAiB,CAahH;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,EACvB,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,mBAAmB,CAAC,CAc9B;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,eAAe,EACvB,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,mBAAmB,EAChC,gBAAgB,EAAE,UAAU,EAC5B,EACE,8BAA8B,EAC9B,iBAAiB,GAClB,EAAE;IAAC,8BAA8B,EAAE,OAAO,CAAC;IAAC,iBAAiB,EAAE,OAAO,CAAA;CAAC,GACvE,OAAO,CAAC,IAAI,CAAC,CA+Bf;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAKjF"}
1
+ {"version":3,"file":"initState.d.ts","sourceRoot":"","sources":["../../src/chain/initState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAC,mBAAmB,EAAE,gBAAgB,EAAuC,MAAM,4BAA4B,CAAC;AACvH,OAAO,EAAC,iBAAiB,EAAM,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAgB,MAAM,EAA6B,MAAM,iBAAiB,CAAC;AAElF,OAAO,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAC,OAAO,EAAC,MAAM,qBAAqB,CAAC;AAG5C,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,eAAe,EACvB,EAAE,EAAE,SAAS,EACb,WAAW,EAAE,gBAAgB,EAC7B,gBAAgB,EAAE,UAAU,GAC3B,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,gBAAgB,GAAG,iBAAiB,CAY7G;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,EACvB,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,mBAAmB,CAAC,CAc9B;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAKjF"}
@@ -1,7 +1,7 @@
1
1
  import { ForkSeq, ZERO_HASH } from "@lodestar/params";
2
- import { computeEpochAtSlot, computeStartSlotAtEpoch, } from "@lodestar/state-transition";
2
+ import { computeEpochAtSlot, isStatePostGloas } from "@lodestar/state-transition";
3
3
  import { ssz } from "@lodestar/types";
4
- import { byteArrayEquals, toHex, toRootHex } from "@lodestar/utils";
4
+ import { LodestarError, byteArrayEquals, toRootHex } from "@lodestar/utils";
5
5
  import { GENESIS_SLOT } from "../constants/index.js";
6
6
  import { getStateTypeFromBytes } from "../util/multifork.js";
7
7
  export async function persistAnchorState(config, db, anchorState, anchorStateBytes) {
@@ -14,7 +14,7 @@ export async function persistAnchorState(config, db, anchorState, anchorStateByt
14
14
  }
15
15
  const latestBlockRoot = ssz.phase0.BeaconBlockHeader.hashTreeRoot(latestBlockHeader);
16
16
  if (!byteArrayEquals(blockRoot, latestBlockRoot)) {
17
- throw Error(`Genesis block root ${toRootHex(blockRoot)} does not match genesis state latest block root ${toRootHex(latestBlockRoot)}`);
17
+ throw new LodestarError({ code: "GENESIS_BLOCK_ROOT_MISMATCH" }, `Genesis block root ${toRootHex(blockRoot)} does not match genesis state latest block root ${toRootHex(latestBlockRoot)}`);
18
18
  }
19
19
  await Promise.all([
20
20
  db.blockArchive.add(genesisBlock),
@@ -31,10 +31,9 @@ export function createGenesisBlock(config, genesisState) {
31
31
  const genesisBlock = types.SignedBeaconBlock.defaultValue();
32
32
  const stateRoot = genesisState.hashTreeRoot();
33
33
  genesisBlock.message.stateRoot = stateRoot;
34
- if (config.getForkSeq(GENESIS_SLOT) >= ForkSeq.gloas) {
34
+ if (config.getForkSeq(GENESIS_SLOT) >= ForkSeq.gloas && isStatePostGloas(genesisState)) {
35
35
  const gloasBlock = genesisBlock;
36
- const gloasState = genesisState;
37
- gloasBlock.message.body.signedExecutionPayloadBid.message = gloasState.latestExecutionPayloadBid.toValue();
36
+ gloasBlock.message.body.signedExecutionPayloadBid.message = genesisState.latestExecutionPayloadBid;
38
37
  }
39
38
  return genesisBlock;
40
39
  }
@@ -54,38 +53,6 @@ export async function initStateFromDb(config, db, logger) {
54
53
  });
55
54
  return state;
56
55
  }
57
- /**
58
- * Initialize and persist an anchor state (either weak subjectivity or genesis)
59
- */
60
- export async function checkAndPersistAnchorState(config, db, logger, anchorState, anchorStateBytes, { isWithinWeakSubjectivityPeriod, isCheckpointState, }) {
61
- const expectedFork = config.getForkInfo(computeStartSlotAtEpoch(anchorState.fork.epoch));
62
- const expectedForkVersion = toHex(expectedFork.version);
63
- const stateFork = toHex(anchorState.fork.currentVersion);
64
- if (stateFork !== expectedForkVersion) {
65
- throw Error(`State current fork version ${stateFork} not equal to current config ${expectedForkVersion}. Maybe caused by importing a state from a different network`);
66
- }
67
- const stateInfo = isCheckpointState ? "checkpoint" : "db";
68
- if (isWithinWeakSubjectivityPeriod) {
69
- logger.info(`Initializing beacon from a valid ${stateInfo} state`, {
70
- slot: anchorState.slot,
71
- epoch: computeEpochAtSlot(anchorState.slot),
72
- stateRoot: toRootHex(anchorState.hashTreeRoot()),
73
- isWithinWeakSubjectivityPeriod,
74
- });
75
- }
76
- else {
77
- logger.warn(`Initializing from a stale ${stateInfo} state vulnerable to long range attacks`, {
78
- slot: anchorState.slot,
79
- epoch: computeEpochAtSlot(anchorState.slot),
80
- stateRoot: toRootHex(anchorState.hashTreeRoot()),
81
- isWithinWeakSubjectivityPeriod,
82
- });
83
- logger.warn("Checkpoint sync recommended, please use --help to see checkpoint sync options");
84
- }
85
- if (isCheckpointState || anchorState.slot === GENESIS_SLOT) {
86
- await persistAnchorState(config, db, anchorState, anchorStateBytes);
87
- }
88
- }
89
56
  export function initBeaconMetrics(metrics, state) {
90
57
  metrics.headSlot.set(state.slot);
91
58
  metrics.previousJustifiedEpoch.set(state.previousJustifiedCheckpoint.epoch);
@@ -1 +1 @@
1
- {"version":3,"file":"initState.js","sourceRoot":"","sources":["../../src/chain/initState.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"initState.js","sourceRoot":"","sources":["../../src/chain/initState.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export type { RestApiServerMetrics, RestApiServerModules, RestApiServerOpts } from "./api/rest/base.js";
2
2
  export { RestApiServer } from "./api/rest/base.js";
3
- export { checkAndPersistAnchorState } from "./chain/index.js";
3
+ export { persistAnchorState } from "./chain/index.js";
4
4
  export { DbCPStateDatastore } from "./chain/stateCache/datastore/db.js";
5
5
  export { FileCPStateDatastore } from "./chain/stateCache/datastore/file.js";
6
6
  export { BeaconDb, type IBeaconDb } from "./db/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,YAAY,EAAC,oBAAoB,EAAE,oBAAoB,EAAE,iBAAiB,EAAC,MAAM,oBAAoB,CAAC;AACtG,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAC,0BAA0B,EAAC,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAC,kBAAkB,EAAC,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAC,oBAAoB,EAAC,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAC,QAAQ,EAAE,KAAK,SAAS,EAAC,MAAM,eAAe,CAAC;AAEvD,OAAO,EACL,KAAK,iBAAiB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAC,iBAAiB,EAAC,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAC,KAAK,gBAAgB,EAAE,kBAAkB,EAAC,MAAM,oBAAoB,CAAC;AAC7E,cAAc,iBAAiB,CAAC;AAEhC,OAAO,EAAC,qBAAqB,EAAE,qBAAqB,EAAC,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,YAAY,EAAC,oBAAoB,EAAE,oBAAoB,EAAE,iBAAiB,EAAC,MAAM,oBAAoB,CAAC;AACtG,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAC,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAC,kBAAkB,EAAC,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAC,oBAAoB,EAAC,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAC,QAAQ,EAAE,KAAK,SAAS,EAAC,MAAM,eAAe,CAAC;AAEvD,OAAO,EACL,KAAK,iBAAiB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAC,iBAAiB,EAAC,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAC,KAAK,gBAAgB,EAAE,kBAAkB,EAAC,MAAM,oBAAoB,CAAC;AAC7E,cAAc,iBAAiB,CAAC;AAEhC,OAAO,EAAC,qBAAqB,EAAE,qBAAqB,EAAC,MAAM,qBAAqB,CAAC"}
package/lib/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // Export generic RestApi server for CLI
2
2
  export { RestApiServer } from "./api/rest/base.js";
3
- export { checkAndPersistAnchorState } from "./chain/index.js";
3
+ export { persistAnchorState } from "./chain/index.js";
4
4
  export { DbCPStateDatastore } from "./chain/stateCache/datastore/db.js";
5
5
  export { FileCPStateDatastore } from "./chain/stateCache/datastore/file.js";
6
6
  export { BeaconDb } from "./db/index.js";
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wCAAwC;AAGxC,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAC,0BAA0B,EAAC,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAC,kBAAkB,EAAC,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAC,oBAAoB,EAAC,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAC,QAAQ,EAAiB,MAAM,eAAe,CAAC;AACvD,6DAA6D;AAC7D,OAAO,EAEL,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,2DAA2D;AAC3D,OAAO,EAAC,iBAAiB,EAAC,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAwB,kBAAkB,EAAC,MAAM,oBAAoB,CAAC;AAC7E,cAAc,iBAAiB,CAAC;AAChC,oEAAoE;AACpE,OAAO,EAAC,qBAAqB,EAAE,qBAAqB,EAAC,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wCAAwC;AAGxC,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAC,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAC,kBAAkB,EAAC,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAC,oBAAoB,EAAC,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAC,QAAQ,EAAiB,MAAM,eAAe,CAAC;AACvD,6DAA6D;AAC7D,OAAO,EAEL,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,2DAA2D;AAC3D,OAAO,EAAC,iBAAiB,EAAC,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAwB,kBAAkB,EAAC,MAAM,oBAAoB,CAAC;AAC7E,cAAc,iBAAiB,CAAC;AAChC,oEAAoE;AACpE,OAAO,EAAC,qBAAqB,EAAE,qBAAqB,EAAC,MAAM,qBAAqB,CAAC"}
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "bugs": {
12
12
  "url": "https://github.com/ChainSafe/lodestar/issues"
13
13
  },
14
- "version": "1.50.0-dev.3579e999b5",
14
+ "version": "1.50.0-dev.53ad0a2af7",
15
15
  "type": "module",
16
16
  "exports": {
17
17
  ".": {
@@ -127,17 +127,17 @@
127
127
  "@libp2p/prometheus-metrics": "^5.0.28",
128
128
  "@libp2p/tcp": "^11.0.27",
129
129
  "@libp2p/utils": "^7.4.0",
130
- "@lodestar/api": "^1.50.0-dev.3579e999b5",
131
- "@lodestar/config": "^1.50.0-dev.3579e999b5",
132
- "@lodestar/db": "^1.50.0-dev.3579e999b5",
133
- "@lodestar/fork-choice": "^1.50.0-dev.3579e999b5",
134
- "@lodestar/logger": "^1.50.0-dev.3579e999b5",
135
- "@lodestar/params": "^1.50.0-dev.3579e999b5",
136
- "@lodestar/reqresp": "^1.50.0-dev.3579e999b5",
137
- "@lodestar/state-transition": "^1.50.0-dev.3579e999b5",
138
- "@lodestar/types": "^1.50.0-dev.3579e999b5",
139
- "@lodestar/utils": "^1.50.0-dev.3579e999b5",
140
- "@lodestar/validator": "^1.50.0-dev.3579e999b5",
130
+ "@lodestar/api": "^1.50.0-dev.53ad0a2af7",
131
+ "@lodestar/config": "^1.50.0-dev.53ad0a2af7",
132
+ "@lodestar/db": "^1.50.0-dev.53ad0a2af7",
133
+ "@lodestar/fork-choice": "^1.50.0-dev.53ad0a2af7",
134
+ "@lodestar/logger": "^1.50.0-dev.53ad0a2af7",
135
+ "@lodestar/params": "^1.50.0-dev.53ad0a2af7",
136
+ "@lodestar/reqresp": "^1.50.0-dev.53ad0a2af7",
137
+ "@lodestar/state-transition": "^1.50.0-dev.53ad0a2af7",
138
+ "@lodestar/types": "^1.50.0-dev.53ad0a2af7",
139
+ "@lodestar/utils": "^1.50.0-dev.53ad0a2af7",
140
+ "@lodestar/validator": "^1.50.0-dev.53ad0a2af7",
141
141
  "@multiformats/multiaddr": "^13.0.1",
142
142
  "datastore-core": "^12.0.1",
143
143
  "datastore-level": "^13.0.1",
@@ -158,8 +158,8 @@
158
158
  "devDependencies": {
159
159
  "@libp2p/interface-internal": "^3.1.12",
160
160
  "@libp2p/logger": "^6.2.13",
161
- "@lodestar/spec-test-util": "^1.50.0-dev.3579e999b5",
162
- "@lodestar/test-utils": "^1.50.0-dev.3579e999b5",
161
+ "@lodestar/spec-test-util": "^1.50.0-dev.53ad0a2af7",
162
+ "@lodestar/test-utils": "^1.50.0-dev.53ad0a2af7",
163
163
  "@types/js-yaml": "^4.0.5",
164
164
  "@types/qs": "^6.9.7",
165
165
  "@types/tmp": "^0.2.3",
@@ -174,5 +174,5 @@
174
174
  "beacon",
175
175
  "blockchain"
176
176
  ],
177
- "gitHead": "608bcdcb8af0553ea0e9230470c95ccca3ab3dba"
177
+ "gitHead": "52f4dcd16fb0f39ec3d30c30881a431ee598442a"
178
178
  }
@@ -1,14 +1,8 @@
1
1
  import {ChainForkConfig} from "@lodestar/config";
2
2
  import {ForkPostGloas, ForkSeq, ZERO_HASH} from "@lodestar/params";
3
- import {
4
- BeaconStateAllForks,
5
- BeaconStateGloas,
6
- IBeaconStateView,
7
- computeEpochAtSlot,
8
- computeStartSlotAtEpoch,
9
- } from "@lodestar/state-transition";
3
+ import {BeaconStateAllForks, IBeaconStateView, computeEpochAtSlot, isStatePostGloas} from "@lodestar/state-transition";
10
4
  import {SignedBeaconBlock, ssz} from "@lodestar/types";
11
- import {Logger, byteArrayEquals, toHex, toRootHex} from "@lodestar/utils";
5
+ import {LodestarError, Logger, byteArrayEquals, toRootHex} from "@lodestar/utils";
12
6
  import {GENESIS_SLOT} from "../constants/index.js";
13
7
  import {IBeaconDb} from "../db/index.js";
14
8
  import {Metrics} from "../metrics/index.js";
@@ -17,7 +11,7 @@ import {getStateTypeFromBytes} from "../util/multifork.js";
17
11
  export async function persistAnchorState(
18
12
  config: ChainForkConfig,
19
13
  db: IBeaconDb,
20
- anchorState: BeaconStateAllForks,
14
+ anchorState: IBeaconStateView,
21
15
  anchorStateBytes: Uint8Array
22
16
  ): Promise<void> {
23
17
  if (anchorState.slot === GENESIS_SLOT) {
@@ -33,7 +27,8 @@ export async function persistAnchorState(
33
27
  const latestBlockRoot = ssz.phase0.BeaconBlockHeader.hashTreeRoot(latestBlockHeader);
34
28
 
35
29
  if (!byteArrayEquals(blockRoot, latestBlockRoot)) {
36
- throw Error(
30
+ throw new LodestarError(
31
+ {code: "GENESIS_BLOCK_ROOT_MISMATCH"},
37
32
  `Genesis block root ${toRootHex(blockRoot)} does not match genesis state latest block root ${toRootHex(latestBlockRoot)}`
38
33
  );
39
34
  }
@@ -48,16 +43,15 @@ export async function persistAnchorState(
48
43
  }
49
44
  }
50
45
 
51
- export function createGenesisBlock(config: ChainForkConfig, genesisState: BeaconStateAllForks): SignedBeaconBlock {
46
+ export function createGenesisBlock(config: ChainForkConfig, genesisState: IBeaconStateView): SignedBeaconBlock {
52
47
  const types = config.getForkTypes(GENESIS_SLOT);
53
48
  const genesisBlock = types.SignedBeaconBlock.defaultValue();
54
49
  const stateRoot = genesisState.hashTreeRoot();
55
50
  genesisBlock.message.stateRoot = stateRoot;
56
51
 
57
- if (config.getForkSeq(GENESIS_SLOT) >= ForkSeq.gloas) {
52
+ if (config.getForkSeq(GENESIS_SLOT) >= ForkSeq.gloas && isStatePostGloas(genesisState)) {
58
53
  const gloasBlock = genesisBlock as SignedBeaconBlock<ForkPostGloas>;
59
- const gloasState = genesisState as BeaconStateGloas;
60
- gloasBlock.message.body.signedExecutionPayloadBid.message = gloasState.latestExecutionPayloadBid.toValue();
54
+ gloasBlock.message.body.signedExecutionPayloadBid.message = genesisState.latestExecutionPayloadBid;
61
55
  }
62
56
 
63
57
  return genesisBlock;
@@ -86,52 +80,6 @@ export async function initStateFromDb(
86
80
  return state;
87
81
  }
88
82
 
89
- /**
90
- * Initialize and persist an anchor state (either weak subjectivity or genesis)
91
- */
92
- export async function checkAndPersistAnchorState(
93
- config: ChainForkConfig,
94
- db: IBeaconDb,
95
- logger: Logger,
96
- anchorState: BeaconStateAllForks,
97
- anchorStateBytes: Uint8Array,
98
- {
99
- isWithinWeakSubjectivityPeriod,
100
- isCheckpointState,
101
- }: {isWithinWeakSubjectivityPeriod: boolean; isCheckpointState: boolean}
102
- ): Promise<void> {
103
- const expectedFork = config.getForkInfo(computeStartSlotAtEpoch(anchorState.fork.epoch));
104
- const expectedForkVersion = toHex(expectedFork.version);
105
- const stateFork = toHex(anchorState.fork.currentVersion);
106
- if (stateFork !== expectedForkVersion) {
107
- throw Error(
108
- `State current fork version ${stateFork} not equal to current config ${expectedForkVersion}. Maybe caused by importing a state from a different network`
109
- );
110
- }
111
-
112
- const stateInfo = isCheckpointState ? "checkpoint" : "db";
113
- if (isWithinWeakSubjectivityPeriod) {
114
- logger.info(`Initializing beacon from a valid ${stateInfo} state`, {
115
- slot: anchorState.slot,
116
- epoch: computeEpochAtSlot(anchorState.slot),
117
- stateRoot: toRootHex(anchorState.hashTreeRoot()),
118
- isWithinWeakSubjectivityPeriod,
119
- });
120
- } else {
121
- logger.warn(`Initializing from a stale ${stateInfo} state vulnerable to long range attacks`, {
122
- slot: anchorState.slot,
123
- epoch: computeEpochAtSlot(anchorState.slot),
124
- stateRoot: toRootHex(anchorState.hashTreeRoot()),
125
- isWithinWeakSubjectivityPeriod,
126
- });
127
- logger.warn("Checkpoint sync recommended, please use --help to see checkpoint sync options");
128
- }
129
-
130
- if (isCheckpointState || anchorState.slot === GENESIS_SLOT) {
131
- await persistAnchorState(config, db, anchorState, anchorStateBytes);
132
- }
133
- }
134
-
135
83
  export function initBeaconMetrics(metrics: Metrics, state: IBeaconStateView): void {
136
84
  metrics.headSlot.set(state.slot);
137
85
  metrics.previousJustifiedEpoch.set(state.previousJustifiedCheckpoint.epoch);
package/src/index.ts CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  export type {RestApiServerMetrics, RestApiServerModules, RestApiServerOpts} from "./api/rest/base.js";
4
4
  export {RestApiServer} from "./api/rest/base.js";
5
- export {checkAndPersistAnchorState} from "./chain/index.js";
5
+ export {persistAnchorState} from "./chain/index.js";
6
6
  export {DbCPStateDatastore} from "./chain/stateCache/datastore/db.js";
7
7
  export {FileCPStateDatastore} from "./chain/stateCache/datastore/file.js";
8
8
  export {BeaconDb, type IBeaconDb} from "./db/index.js";