@chainsafe/lodestar 1.50.0-dev.fef46df5ba → 1.50.0

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 (72) hide show
  1. package/.git-data.json +2 -2
  2. package/lib/cmds/beacon/handler.d.ts +1 -0
  3. package/lib/cmds/beacon/handler.d.ts.map +1 -1
  4. package/lib/cmds/beacon/handler.js +11 -6
  5. package/lib/cmds/beacon/handler.js.map +1 -1
  6. package/lib/cmds/beacon/initBeaconState.d.ts +4 -2
  7. package/lib/cmds/beacon/initBeaconState.d.ts.map +1 -1
  8. package/lib/cmds/beacon/initBeaconState.js +26 -13
  9. package/lib/cmds/beacon/initBeaconState.js.map +1 -1
  10. package/lib/cmds/beacon/options.d.ts +1 -1
  11. package/lib/cmds/beacon/options.d.ts.map +1 -1
  12. package/lib/cmds/beacon/options.js +6 -5
  13. package/lib/cmds/beacon/options.js.map +1 -1
  14. package/lib/cmds/beacon/paths.d.ts +4 -0
  15. package/lib/cmds/beacon/paths.d.ts.map +1 -1
  16. package/lib/cmds/beacon/paths.js +3 -0
  17. package/lib/cmds/beacon/paths.js.map +1 -1
  18. package/lib/cmds/beacon/pubkeysFile.d.ts +10 -0
  19. package/lib/cmds/beacon/pubkeysFile.d.ts.map +1 -0
  20. package/lib/cmds/beacon/pubkeysFile.js +39 -0
  21. package/lib/cmds/beacon/pubkeysFile.js.map +1 -0
  22. package/lib/cmds/beacon/stateInitialization/checkpointState.js +24 -8
  23. package/lib/cmds/beacon/stateInitialization/checkpointState.js.map +1 -1
  24. package/lib/cmds/beacon/stateInitialization/genesisState.d.ts +1 -1
  25. package/lib/cmds/beacon/stateInitialization/genesisState.d.ts.map +1 -1
  26. package/lib/cmds/beacon/stateInitialization/genesisState.js +17 -3
  27. package/lib/cmds/beacon/stateInitialization/genesisState.js.map +1 -1
  28. package/lib/cmds/beacon/stateInitialization/prepareStateInitialization.d.ts +2 -2
  29. package/lib/cmds/beacon/stateInitialization/prepareStateInitialization.d.ts.map +1 -1
  30. package/lib/cmds/beacon/stateInitialization/prepareStateInitialization.js +20 -8
  31. package/lib/cmds/beacon/stateInitialization/prepareStateInitialization.js.map +1 -1
  32. package/lib/cmds/beacon/stateInitialization/types.d.ts +4 -2
  33. package/lib/cmds/beacon/stateInitialization/types.d.ts.map +1 -1
  34. package/lib/cmds/dev/handler.d.ts.map +1 -1
  35. package/lib/cmds/dev/handler.js +3 -1
  36. package/lib/cmds/dev/handler.js.map +1 -1
  37. package/lib/cmds/dev/options.d.ts +3 -1
  38. package/lib/cmds/dev/options.d.ts.map +1 -1
  39. package/lib/cmds/validator/handler.js +6 -1
  40. package/lib/cmds/validator/handler.js.map +1 -1
  41. package/lib/cmds/validator/options.js +1 -1
  42. package/lib/cmds/validator/options.js.map +1 -1
  43. package/lib/index.js +0 -0
  44. package/lib/networks/index.d.ts.map +1 -1
  45. package/lib/networks/index.js +5 -0
  46. package/lib/networks/index.js.map +1 -1
  47. package/lib/options/beaconNodeOptions/chain.d.ts +2 -1
  48. package/lib/options/beaconNodeOptions/chain.d.ts.map +1 -1
  49. package/lib/options/beaconNodeOptions/chain.js +11 -4
  50. package/lib/options/beaconNodeOptions/chain.js.map +1 -1
  51. package/lib/options/beaconNodeOptions/execution.d.ts +2 -1
  52. package/lib/options/beaconNodeOptions/execution.d.ts.map +1 -1
  53. package/lib/options/beaconNodeOptions/execution.js +9 -1
  54. package/lib/options/beaconNodeOptions/execution.js.map +1 -1
  55. package/lib/options/beaconNodeOptions/index.d.ts +3 -1
  56. package/lib/options/beaconNodeOptions/index.d.ts.map +1 -1
  57. package/package.json +15 -15
  58. package/src/cmds/beacon/handler.ts +15 -6
  59. package/src/cmds/beacon/initBeaconState.ts +40 -13
  60. package/src/cmds/beacon/options.ts +8 -7
  61. package/src/cmds/beacon/paths.ts +5 -0
  62. package/src/cmds/beacon/pubkeysFile.ts +50 -0
  63. package/src/cmds/beacon/stateInitialization/checkpointState.ts +28 -12
  64. package/src/cmds/beacon/stateInitialization/genesisState.ts +18 -4
  65. package/src/cmds/beacon/stateInitialization/prepareStateInitialization.ts +21 -8
  66. package/src/cmds/beacon/stateInitialization/types.ts +4 -3
  67. package/src/cmds/dev/handler.ts +3 -1
  68. package/src/cmds/validator/handler.ts +11 -0
  69. package/src/cmds/validator/options.ts +1 -1
  70. package/src/networks/index.ts +9 -0
  71. package/src/options/beaconNodeOptions/chain.ts +14 -5
  72. package/src/options/beaconNodeOptions/execution.ts +12 -1
@@ -300,6 +300,17 @@ function getProposerConfigFromArgs(
300
300
  }
301
301
  }
302
302
 
303
+ const configs = [valProposerConfig.defaultConfig, ...Object.values(valProposerConfig.proposerConfig ?? {})];
304
+ if (
305
+ configs.some(
306
+ (config) =>
307
+ config.builder?.selection === routes.validator.BuilderSelection.ExecutionOnly &&
308
+ (config.builder.builders ?? []).length > 0
309
+ )
310
+ ) {
311
+ throw new YargsError("Builder selection executiononly can not be combined with builders");
312
+ }
313
+
303
314
  return valProposerConfig;
304
315
  }
305
316
 
@@ -267,7 +267,7 @@ export const validatorOptions: CliCommandOptions<IValidatorCliArgs> = {
267
267
  "builder.selection": {
268
268
  type: "string",
269
269
  description:
270
- "Builder block selection strategy `default`, `maxprofit`, `builderalways`, `executionalways`, or pre-Gloas `executiononly`",
270
+ "Builder block selection strategy `default`, `maxprofit`, `builderalways`, `executionalways`, or `executiononly`",
271
271
  defaultDescription: `${defaultOptions.builderSelection}`,
272
272
  group: "builder",
273
273
  },
@@ -182,11 +182,20 @@ export async function fetchWeakSubjectivityStateBytes(
182
182
  GET_STATE_LOG_INTERVAL
183
183
  );
184
184
  const wsStateBytes = response.ssz();
185
+ const {version} = response.meta();
185
186
 
186
187
  const wsSlot = getStateSlotFromBytes(wsStateBytes);
187
188
  const logData = {stateId, size: formatBytes(wsStateBytes.length)};
188
189
  logger.info("Download completed", typeof stateId === "number" ? logData : {...logData, slot: wsSlot});
189
190
 
191
+ const expectedFork = config.getForkName(wsSlot);
192
+ if (version !== expectedFork) {
193
+ throw new LodestarError(
194
+ {code: "CHECKPOINT_FORK_MISMATCH"},
195
+ `Checkpoint sync server returned ${version} state at slot ${wsSlot} but local config expects ${expectedFork}, verify --network or the chain config`
196
+ );
197
+ }
198
+
190
199
  return {
191
200
  stateBytes: new Uint8Array(wsStateBytes.buffer, wsStateBytes.byteOffset, wsStateBytes.byteLength),
192
201
  expectedCheckpoint: wsCheckpoint,
@@ -12,6 +12,7 @@ export type ChainArgs = {
12
12
  "chain.blsVerifyAllMainThread"?: boolean;
13
13
  "chain.disableBlsBatchVerify"?: boolean;
14
14
  "chain.persistProducedBlocks"?: boolean;
15
+ "chain.persistProducedPayloadEnvelopes"?: boolean;
15
16
  "chain.persistInvalidSszObjects"?: boolean;
16
17
  // No need to define chain.persistInvalidSszObjects as part of ChainArgs
17
18
  // as this is defined as part of BeaconPaths
@@ -35,7 +36,7 @@ export type ChainArgs = {
35
36
  "chain.archiveDataEpochs"?: number;
36
37
  "chain.archiveMode": ArchiveMode;
37
38
  "chain.nHistoricalStatesFileDataStore"?: boolean;
38
- "chain.nativeStateView"?: boolean;
39
+ "chain.nativeStateTransition"?: boolean;
39
40
  "chain.maxBlockStates"?: number;
40
41
  "chain.maxCPStateEpochsInMemory"?: number;
41
42
  "chain.maxCPStateEpochsOnDisk"?: number;
@@ -53,6 +54,7 @@ export function parseArgs(args: ChainArgs & CircuitBreakerArgs): IBeaconNodeOpti
53
54
  blsVerifyAllMainThread: args["chain.blsVerifyAllMainThread"],
54
55
  disableBlsBatchVerify: args["chain.disableBlsBatchVerify"],
55
56
  persistProducedBlocks: args["chain.persistProducedBlocks"],
57
+ persistProducedPayloadEnvelopes: args["chain.persistProducedPayloadEnvelopes"],
56
58
  persistInvalidSszObjects: args["chain.persistInvalidSszObjects"],
57
59
  // biome-ignore lint/suspicious/noExplicitAny: We need to use `any` type here
58
60
  persistInvalidSszObjectsDir: undefined as any,
@@ -79,7 +81,7 @@ export function parseArgs(args: ChainArgs & CircuitBreakerArgs): IBeaconNodeOpti
79
81
  archiveMode: args["chain.archiveMode"] ?? defaultOptions.chain.archiveMode,
80
82
  nHistoricalStatesFileDataStore:
81
83
  args["chain.nHistoricalStatesFileDataStore"] ?? defaultOptions.chain.nHistoricalStatesFileDataStore,
82
- nativeStateView: args["chain.nativeStateView"] ?? defaultOptions.chain.nativeStateView,
84
+ nativeStateTransition: args["chain.nativeStateTransition"] ?? defaultOptions.chain.nativeStateTransition,
83
85
  maxBlockStates: args["chain.maxBlockStates"] ?? defaultOptions.chain.maxBlockStates,
84
86
  maxCPStateEpochsInMemory: args["chain.maxCPStateEpochsInMemory"] ?? defaultOptions.chain.maxCPStateEpochsInMemory,
85
87
  maxCPStateEpochsOnDisk: args["chain.maxCPStateEpochsOnDisk"] ?? defaultOptions.chain.maxCPStateEpochsOnDisk,
@@ -170,6 +172,13 @@ Will double processing times. Use only for debugging purposes.",
170
172
  group: "chain",
171
173
  },
172
174
 
175
+ "chain.persistProducedPayloadEnvelopes": {
176
+ hidden: true,
177
+ type: "boolean",
178
+ description: "Persist produced execution payload envelopes as SSZ files for debugging",
179
+ group: "chain",
180
+ },
181
+
173
182
  "chain.persistInvalidSszObjects": {
174
183
  hidden: true,
175
184
  type: "boolean",
@@ -318,11 +327,11 @@ Will double processing times. Use only for debugging purposes.",
318
327
  group: "chain",
319
328
  },
320
329
 
321
- "chain.nativeStateView": {
330
+ "chain.nativeStateTransition": {
322
331
  hidden: true,
323
- description: "Use native (Zig) BeaconStateView instead of JS implementation",
332
+ description: "Use native (Zig) state transition instead of JS implementation",
324
333
  type: "boolean",
325
- default: defaultOptions.chain.nativeStateView,
334
+ default: defaultOptions.chain.nativeStateTransition,
326
335
  group: "chain",
327
336
  },
328
337
 
@@ -1,5 +1,5 @@
1
1
  import fs from "node:fs";
2
- import {IBeaconNodeOptions, defaultExecutionEngineHttpOpts} from "@lodestar/beacon-node";
2
+ import {EngineApiMode, IBeaconNodeOptions, defaultExecutionEngineHttpOpts, engineApiModes} from "@lodestar/beacon-node";
3
3
  import {CliCommandOptions} from "@lodestar/utils";
4
4
  import {extractJwtHexSecret} from "../../util/index.js";
5
5
 
@@ -8,6 +8,7 @@ export type ExecutionEngineArgs = {
8
8
  "execution.timeout"?: number;
9
9
  "execution.retries": number;
10
10
  "execution.retryDelay": number;
11
+ "execution.engineApi"?: EngineApiMode;
11
12
  "execution.engineMock"?: boolean;
12
13
  jwtSecret?: string;
13
14
  jwtId?: string;
@@ -26,6 +27,7 @@ export function parseArgs(args: ExecutionEngineArgs): IBeaconNodeOptions["execut
26
27
  timeout: args["execution.timeout"],
27
28
  retries: args["execution.retries"],
28
29
  retryDelay: args["execution.retryDelay"],
30
+ engineApi: args["execution.engineApi"],
29
31
  /**
30
32
  * jwtSecret is parsed as hex instead of bytes because the merge with defaults
31
33
  * in beaconOptions messes up the bytes array as as index => value object
@@ -69,6 +71,15 @@ export const options: CliCommandOptions<ExecutionEngineArgs> = {
69
71
  group: "execution",
70
72
  },
71
73
 
74
+ "execution.engineApi": {
75
+ description:
76
+ "Engine API transport. 'auto' negotiates REST with SSZ for a single execution URL and uses JSON-RPC for multiple URLs or unsupported features. 'ssz' requires a single REST-capable execution URL without JSON-RPC fallback. 'json-rpc' always uses JSON-RPC",
77
+ type: "string",
78
+ choices: engineApiModes,
79
+ default: defaultExecutionEngineHttpOpts.engineApi,
80
+ group: "execution",
81
+ },
82
+
72
83
  "execution.engineMock": {
73
84
  description: "Set the execution engine to mock mode (development only)",
74
85
  type: "boolean",