@lodestar/beacon-node 1.21.0-dev.3ecee0797a → 1.21.0-dev.3fb7f60609
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/lib/api/impl/api.js +1 -1
- package/lib/api/impl/api.js.map +1 -1
- package/lib/api/impl/beacon/state/utils.js +1 -1
- package/lib/api/impl/beacon/state/utils.js.map +1 -1
- package/lib/api/impl/validator/index.d.ts +2 -1
- package/lib/api/impl/validator/index.js +6 -5
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/api/options.d.ts +2 -0
- package/lib/api/options.js +1 -0
- package/lib/api/options.js.map +1 -1
- package/lib/chain/chain.d.ts +9 -1
- package/lib/chain/chain.js +40 -31
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/historicalState/getHistoricalState.d.ts +17 -0
- package/lib/chain/historicalState/getHistoricalState.js +73 -0
- package/lib/chain/historicalState/getHistoricalState.js.map +1 -0
- package/lib/chain/historicalState/index.d.ts +15 -0
- package/lib/chain/historicalState/index.js +50 -0
- package/lib/chain/historicalState/index.js.map +1 -0
- package/lib/chain/historicalState/types.d.ts +52 -0
- package/lib/chain/historicalState/types.js +7 -0
- package/lib/chain/historicalState/types.js.map +1 -0
- package/lib/chain/historicalState/worker.d.ts +2 -0
- package/lib/chain/historicalState/worker.js +198 -0
- package/lib/chain/historicalState/worker.js.map +1 -0
- package/lib/chain/interface.d.ts +5 -0
- package/lib/eth1/provider/eth1Provider.js +2 -2
- package/lib/eth1/provider/eth1Provider.js.map +1 -1
- package/lib/execution/builder/http.js +2 -2
- package/lib/execution/builder/http.js.map +1 -1
- package/lib/execution/engine/http.d.ts +14 -2
- package/lib/execution/engine/http.js +29 -2
- package/lib/execution/engine/http.js.map +1 -1
- package/lib/execution/engine/index.js +3 -3
- package/lib/execution/engine/index.js.map +1 -1
- package/lib/execution/engine/interface.d.ts +26 -0
- package/lib/execution/engine/interface.js +20 -0
- package/lib/execution/engine/interface.js.map +1 -1
- package/lib/execution/engine/mock.d.ts +1 -0
- package/lib/execution/engine/mock.js +5 -1
- package/lib/execution/engine/mock.js.map +1 -1
- package/lib/execution/engine/types.d.ts +15 -0
- package/lib/execution/engine/types.js.map +1 -1
- package/lib/metrics/server/http.d.ts +1 -1
- package/lib/metrics/server/http.js +3 -2
- package/lib/metrics/server/http.js.map +1 -1
- package/lib/network/libp2p/index.js +1 -2
- package/lib/network/libp2p/index.js.map +1 -1
- package/lib/node/nodejs.js +13 -1
- package/lib/node/nodejs.js.map +1 -1
- package/lib/util/graffiti.d.ts +4 -0
- package/lib/util/graffiti.js +12 -0
- package/lib/util/graffiti.js.map +1 -1
- package/lib/util/metadata.d.ts +6 -0
- package/lib/util/metadata.js +10 -0
- package/lib/util/metadata.js.map +1 -0
- package/package.json +14 -15
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BeaconStateAllForks, CachedBeaconStateAllForks, PubkeyIndexMap } from "@lodestar/state-transition";
|
|
2
|
+
import { BeaconConfig } from "@lodestar/config";
|
|
3
|
+
import { IBeaconDb } from "../../db/index.js";
|
|
4
|
+
import { HistoricalStateRegenMetrics } from "./types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Populate a PubkeyIndexMap with any new entries based on a BeaconState
|
|
7
|
+
*/
|
|
8
|
+
export declare function syncPubkeyCache(state: BeaconStateAllForks, pubkey2index: PubkeyIndexMap): void;
|
|
9
|
+
/**
|
|
10
|
+
* Get the nearest BeaconState at or before a slot
|
|
11
|
+
*/
|
|
12
|
+
export declare function getNearestState(slot: number, config: BeaconConfig, db: IBeaconDb, pubkey2index: PubkeyIndexMap): Promise<CachedBeaconStateAllForks>;
|
|
13
|
+
/**
|
|
14
|
+
* Get and regenerate a historical state
|
|
15
|
+
*/
|
|
16
|
+
export declare function getHistoricalState(slot: number, config: BeaconConfig, db: IBeaconDb, pubkey2index: PubkeyIndexMap, metrics?: HistoricalStateRegenMetrics): Promise<Uint8Array>;
|
|
17
|
+
//# sourceMappingURL=getHistoricalState.d.ts.map
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { DataAvailableStatus, ExecutionPayloadStatus, createCachedBeaconState, stateTransition, } from "@lodestar/state-transition";
|
|
2
|
+
import { RegenErrorType } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Populate a PubkeyIndexMap with any new entries based on a BeaconState
|
|
5
|
+
*/
|
|
6
|
+
export function syncPubkeyCache(state, pubkey2index) {
|
|
7
|
+
// Get the validators sub tree once for all the loop
|
|
8
|
+
const validators = state.validators;
|
|
9
|
+
const newCount = state.validators.length;
|
|
10
|
+
for (let i = pubkey2index.size; i < newCount; i++) {
|
|
11
|
+
const pubkey = validators.getReadonly(i).pubkey;
|
|
12
|
+
pubkey2index.set(pubkey, i);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Get the nearest BeaconState at or before a slot
|
|
17
|
+
*/
|
|
18
|
+
export async function getNearestState(slot, config, db, pubkey2index) {
|
|
19
|
+
const states = await db.stateArchive.values({ limit: 1, lte: slot, reverse: true });
|
|
20
|
+
if (!states.length) {
|
|
21
|
+
throw new Error("No near state found in the database");
|
|
22
|
+
}
|
|
23
|
+
const state = states[0];
|
|
24
|
+
syncPubkeyCache(state, pubkey2index);
|
|
25
|
+
return createCachedBeaconState(state, {
|
|
26
|
+
config,
|
|
27
|
+
pubkey2index,
|
|
28
|
+
index2pubkey: [],
|
|
29
|
+
}, {
|
|
30
|
+
skipSyncPubkeys: true,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get and regenerate a historical state
|
|
35
|
+
*/
|
|
36
|
+
export async function getHistoricalState(slot, config, db, pubkey2index, metrics) {
|
|
37
|
+
const regenTimer = metrics?.regenTime.startTimer();
|
|
38
|
+
const loadStateTimer = metrics?.loadStateTime.startTimer();
|
|
39
|
+
let state = await getNearestState(slot, config, db, pubkey2index).catch((e) => {
|
|
40
|
+
metrics?.regenErrorCount.inc({ reason: RegenErrorType.loadState });
|
|
41
|
+
throw e;
|
|
42
|
+
});
|
|
43
|
+
loadStateTimer?.();
|
|
44
|
+
const transitionTimer = metrics?.stateTransitionTime.startTimer();
|
|
45
|
+
let blockCount = 0;
|
|
46
|
+
for await (const block of db.blockArchive.valuesStream({ gt: state.slot, lte: slot })) {
|
|
47
|
+
try {
|
|
48
|
+
state = stateTransition(state, block, {
|
|
49
|
+
verifyProposer: false,
|
|
50
|
+
verifySignatures: false,
|
|
51
|
+
verifyStateRoot: false,
|
|
52
|
+
executionPayloadStatus: ExecutionPayloadStatus.valid,
|
|
53
|
+
dataAvailableStatus: DataAvailableStatus.available,
|
|
54
|
+
}, metrics);
|
|
55
|
+
}
|
|
56
|
+
catch (e) {
|
|
57
|
+
metrics?.regenErrorCount.inc({ reason: RegenErrorType.blockProcessing });
|
|
58
|
+
throw e;
|
|
59
|
+
}
|
|
60
|
+
blockCount++;
|
|
61
|
+
if (Buffer.compare(state.hashTreeRoot(), block.message.stateRoot) !== 0) {
|
|
62
|
+
metrics?.regenErrorCount.inc({ reason: RegenErrorType.invalidStateRoot });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
metrics?.stateTransitionBlocks.observe(blockCount);
|
|
66
|
+
transitionTimer?.();
|
|
67
|
+
const serializeTimer = metrics?.stateSerializationTime.startTimer();
|
|
68
|
+
const stateBytes = state.serialize();
|
|
69
|
+
serializeTimer?.();
|
|
70
|
+
regenTimer?.();
|
|
71
|
+
return stateBytes;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=getHistoricalState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getHistoricalState.js","sourceRoot":"","sources":["../../../src/chain/historicalState/getHistoricalState.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { HistoricalStateRegenInitModules, HistoricalStateRegenModules, HistoricalStateWorkerApi } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* HistoricalStateRegen limits the damage from recreating historical states
|
|
4
|
+
* by running regen in a separate worker thread.
|
|
5
|
+
*/
|
|
6
|
+
export declare class HistoricalStateRegen implements HistoricalStateWorkerApi {
|
|
7
|
+
private readonly api;
|
|
8
|
+
private readonly logger;
|
|
9
|
+
constructor(modules: HistoricalStateRegenModules);
|
|
10
|
+
static init(modules: HistoricalStateRegenInitModules): Promise<HistoricalStateRegen>;
|
|
11
|
+
scrapeMetrics(): Promise<string>;
|
|
12
|
+
close(): Promise<void>;
|
|
13
|
+
getHistoricalState(slot: number): Promise<Uint8Array>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { Thread, spawn, Worker } from "@chainsafe/threads";
|
|
3
|
+
import { chainConfigToJson } from "@lodestar/config";
|
|
4
|
+
// Worker constructor consider the path relative to the current working directory
|
|
5
|
+
const WORKER_DIR = process.env.NODE_ENV === "test" ? "../../../lib/chain/historicalState" : "./";
|
|
6
|
+
/**
|
|
7
|
+
* HistoricalStateRegen limits the damage from recreating historical states
|
|
8
|
+
* by running regen in a separate worker thread.
|
|
9
|
+
*/
|
|
10
|
+
export class HistoricalStateRegen {
|
|
11
|
+
constructor(modules) {
|
|
12
|
+
this.api = modules.api;
|
|
13
|
+
this.logger = modules.logger;
|
|
14
|
+
modules.signal?.addEventListener("abort", () => this.close(), { once: true });
|
|
15
|
+
}
|
|
16
|
+
static async init(modules) {
|
|
17
|
+
const workerData = {
|
|
18
|
+
chainConfigJson: chainConfigToJson(modules.config),
|
|
19
|
+
genesisValidatorsRoot: modules.config.genesisValidatorsRoot,
|
|
20
|
+
genesisTime: modules.opts.genesisTime,
|
|
21
|
+
maxConcurrency: 1,
|
|
22
|
+
maxLength: 50,
|
|
23
|
+
dbLocation: modules.opts.dbLocation,
|
|
24
|
+
metricsEnabled: Boolean(modules.metrics),
|
|
25
|
+
loggerOpts: modules.logger.toOpts(),
|
|
26
|
+
};
|
|
27
|
+
const worker = new Worker(path.join(WORKER_DIR, "worker.js"), {
|
|
28
|
+
workerData,
|
|
29
|
+
});
|
|
30
|
+
const api = await spawn(worker, {
|
|
31
|
+
// A Lodestar Node may do very expensive task at start blocking the event loop and causing
|
|
32
|
+
// the initialization to timeout. The number below is big enough to almost disable the timeout
|
|
33
|
+
timeout: 5 * 60 * 1000,
|
|
34
|
+
});
|
|
35
|
+
return new HistoricalStateRegen({ ...modules, api });
|
|
36
|
+
}
|
|
37
|
+
async scrapeMetrics() {
|
|
38
|
+
return this.api.scrapeMetrics();
|
|
39
|
+
}
|
|
40
|
+
async close() {
|
|
41
|
+
await this.api.close();
|
|
42
|
+
this.logger.debug("Terminating historical state worker");
|
|
43
|
+
await Thread.terminate(this.api);
|
|
44
|
+
this.logger.debug("Terminated historical state worker");
|
|
45
|
+
}
|
|
46
|
+
async getHistoricalState(slot) {
|
|
47
|
+
return this.api.getHistoricalState(slot);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/chain/historicalState/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAe,MAAM,EAAE,KAAK,EAAE,MAAM,EAAC,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAC,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AASnD,iFAAiF;AACjF,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,IAAI,CAAC;AAEjG;;;GAGG;AACH,MAAM,OAAO,oBAAoB;IAI/B,YAAY,OAAoC;QAC9C,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC;IAC9E,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAwC;QACxD,MAAM,UAAU,GAA8B;YAC5C,eAAe,EAAE,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC;YAClD,qBAAqB,EAAE,OAAO,CAAC,MAAM,CAAC,qBAAqB;YAC3D,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW;YACrC,cAAc,EAAE,CAAC;YACjB,SAAS,EAAE,EAAE;YACb,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU;YACnC,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;YACxC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;SACpC,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE;YAC5D,UAAU;SACgC,CAAC,CAAC;QAE9C,MAAM,GAAG,GAAG,MAAM,KAAK,CAA2B,MAAM,EAAE;YACxD,0FAA0F;YAC1F,8FAA8F;YAC9F,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;SACvB,CAAC,CAAC;QAEH,OAAO,IAAI,oBAAoB,CAAC,EAAC,GAAG,OAAO,EAAE,GAAG,EAAC,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,IAAY;QACnC,OAAO,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;CACF"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { ModuleThread } from "@chainsafe/threads";
|
|
2
|
+
import { BeaconConfig } from "@lodestar/config";
|
|
3
|
+
import { LoggerNode, LoggerNodeOpts } from "@lodestar/logger/node";
|
|
4
|
+
import { BeaconStateTransitionMetrics } from "@lodestar/state-transition";
|
|
5
|
+
import { Gauge, Histogram } from "@lodestar/utils";
|
|
6
|
+
import { Metrics } from "../../metrics/index.js";
|
|
7
|
+
export type HistoricalStateRegenInitModules = {
|
|
8
|
+
opts: {
|
|
9
|
+
genesisTime: number;
|
|
10
|
+
dbLocation: string;
|
|
11
|
+
};
|
|
12
|
+
config: BeaconConfig;
|
|
13
|
+
logger: LoggerNode;
|
|
14
|
+
metrics: Metrics | null;
|
|
15
|
+
signal?: AbortSignal;
|
|
16
|
+
};
|
|
17
|
+
export type HistoricalStateRegenModules = HistoricalStateRegenInitModules & {
|
|
18
|
+
api: ModuleThread<HistoricalStateWorkerApi>;
|
|
19
|
+
};
|
|
20
|
+
export type HistoricalStateWorkerData = {
|
|
21
|
+
chainConfigJson: Record<string, string>;
|
|
22
|
+
genesisValidatorsRoot: Uint8Array;
|
|
23
|
+
genesisTime: number;
|
|
24
|
+
maxConcurrency: number;
|
|
25
|
+
maxLength: number;
|
|
26
|
+
dbLocation: string;
|
|
27
|
+
metricsEnabled: boolean;
|
|
28
|
+
loggerOpts: LoggerNodeOpts;
|
|
29
|
+
};
|
|
30
|
+
export type HistoricalStateWorkerApi = {
|
|
31
|
+
close(): Promise<void>;
|
|
32
|
+
scrapeMetrics(): Promise<string>;
|
|
33
|
+
getHistoricalState(slot: number): Promise<Uint8Array>;
|
|
34
|
+
};
|
|
35
|
+
export declare enum RegenErrorType {
|
|
36
|
+
loadState = "load_state",
|
|
37
|
+
invalidStateRoot = "invalid_state_root",
|
|
38
|
+
blockProcessing = "block_processing"
|
|
39
|
+
}
|
|
40
|
+
export type HistoricalStateRegenMetrics = BeaconStateTransitionMetrics & {
|
|
41
|
+
regenTime: Histogram;
|
|
42
|
+
loadStateTime: Histogram;
|
|
43
|
+
stateTransitionTime: Histogram;
|
|
44
|
+
stateTransitionBlocks: Histogram;
|
|
45
|
+
stateSerializationTime: Histogram;
|
|
46
|
+
regenRequestCount: Gauge;
|
|
47
|
+
regenSuccessCount: Gauge;
|
|
48
|
+
regenErrorCount: Gauge<{
|
|
49
|
+
reason: RegenErrorType;
|
|
50
|
+
}>;
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export var RegenErrorType;
|
|
2
|
+
(function (RegenErrorType) {
|
|
3
|
+
RegenErrorType["loadState"] = "load_state";
|
|
4
|
+
RegenErrorType["invalidStateRoot"] = "invalid_state_root";
|
|
5
|
+
RegenErrorType["blockProcessing"] = "block_processing";
|
|
6
|
+
})(RegenErrorType || (RegenErrorType = {}));
|
|
7
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/chain/historicalState/types.ts"],"names":[],"mappings":"AAsCA,MAAM,CAAN,IAAY,cAIX;AAJD,WAAY,cAAc;IACxB,0CAAwB,CAAA;IACxB,yDAAuC,CAAA;IACvC,sDAAoC,CAAA;AACtC,CAAC,EAJW,cAAc,KAAd,cAAc,QAIzB"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import worker from "node:worker_threads";
|
|
2
|
+
import { Transfer, expose } from "@chainsafe/threads/worker";
|
|
3
|
+
import { createBeaconConfig, chainConfigFromJson } from "@lodestar/config";
|
|
4
|
+
import { getNodeLogger } from "@lodestar/logger/node";
|
|
5
|
+
import { PubkeyIndexMap, } from "@lodestar/state-transition";
|
|
6
|
+
import { LevelDbController } from "@lodestar/db";
|
|
7
|
+
import { RegistryMetricCreator, collectNodeJSMetrics } from "../../metrics/index.js";
|
|
8
|
+
import { JobFnQueue } from "../../util/queue/fnQueue.js";
|
|
9
|
+
import { BeaconDb } from "../../db/index.js";
|
|
10
|
+
import { getHistoricalState } from "./getHistoricalState.js";
|
|
11
|
+
// most of this setup copied from networkCoreWorker.ts
|
|
12
|
+
const workerData = worker.workerData;
|
|
13
|
+
// TODO: Pass options from main thread for logging
|
|
14
|
+
// TODO: Logging won't be visible in file loggers
|
|
15
|
+
const logger = getNodeLogger(workerData.loggerOpts);
|
|
16
|
+
logger.info("Historical state worker started");
|
|
17
|
+
const config = createBeaconConfig(chainConfigFromJson(workerData.chainConfigJson), workerData.genesisValidatorsRoot);
|
|
18
|
+
const db = new BeaconDb(config, await LevelDbController.create({ name: workerData.dbLocation }, { logger }));
|
|
19
|
+
const abortController = new AbortController();
|
|
20
|
+
// Set up metrics, nodejs, state transition, queue
|
|
21
|
+
const metricsRegister = workerData.metricsEnabled ? new RegistryMetricCreator() : null;
|
|
22
|
+
let historicalStateRegenMetrics;
|
|
23
|
+
let queueMetrics;
|
|
24
|
+
if (metricsRegister) {
|
|
25
|
+
const closeMetrics = collectNodeJSMetrics(metricsRegister, "lodestar_historical_state_worker_");
|
|
26
|
+
abortController.signal.addEventListener("abort", closeMetrics, { once: true });
|
|
27
|
+
historicalStateRegenMetrics = {
|
|
28
|
+
// state transition metrics
|
|
29
|
+
epochTransitionTime: metricsRegister.histogram({
|
|
30
|
+
name: "lodestar_historical_state_stfn_epoch_transition_seconds",
|
|
31
|
+
help: "Time to process a single epoch transition in seconds",
|
|
32
|
+
// Epoch transitions are 100ms on very fast clients, and average 800ms on heavy networks
|
|
33
|
+
buckets: [0.01, 0.05, 0.1, 0.2, 0.5, 0.75, 1, 1.25, 1.5, 3, 10],
|
|
34
|
+
}),
|
|
35
|
+
epochTransitionCommitTime: metricsRegister.histogram({
|
|
36
|
+
name: "lodestar_historical_state_stfn_epoch_transition_commit_seconds",
|
|
37
|
+
help: "Time to call commit after process a single epoch transition in seconds",
|
|
38
|
+
buckets: [0.01, 0.05, 0.1, 0.2, 0.5, 0.75, 1],
|
|
39
|
+
}),
|
|
40
|
+
epochTransitionStepTime: metricsRegister.histogram({
|
|
41
|
+
name: "lodestar_historical_state_stfn_epoch_transition_step_seconds",
|
|
42
|
+
help: "Time to call each step of epoch transition in seconds",
|
|
43
|
+
labelNames: ["step"],
|
|
44
|
+
buckets: [0.01, 0.05, 0.1, 0.2, 0.5, 0.75, 1],
|
|
45
|
+
}),
|
|
46
|
+
processBlockTime: metricsRegister.histogram({
|
|
47
|
+
name: "lodestar_historical_state_stfn_process_block_seconds",
|
|
48
|
+
help: "Time to process a single block in seconds",
|
|
49
|
+
// TODO: Add metrics for each step
|
|
50
|
+
// Block processing can take 5-40ms, 100ms max
|
|
51
|
+
buckets: [0.005, 0.01, 0.02, 0.05, 0.1, 1],
|
|
52
|
+
}),
|
|
53
|
+
processBlockCommitTime: metricsRegister.histogram({
|
|
54
|
+
name: "lodestar_historical_state_stfn_process_block_commit_seconds",
|
|
55
|
+
help: "Time to call commit after process a single block in seconds",
|
|
56
|
+
buckets: [0.005, 0.01, 0.02, 0.05, 0.1, 1],
|
|
57
|
+
}),
|
|
58
|
+
stateHashTreeRootTime: metricsRegister.histogram({
|
|
59
|
+
name: "lodestar_historical_state_stfn_hash_tree_root_seconds",
|
|
60
|
+
help: "Time to compute the hash tree root of a post state in seconds",
|
|
61
|
+
buckets: [0.05, 0.1, 0.2, 0.5, 1, 1.5],
|
|
62
|
+
labelNames: ["source"],
|
|
63
|
+
}),
|
|
64
|
+
preStateBalancesNodesPopulatedMiss: metricsRegister.gauge({
|
|
65
|
+
name: "lodestar_historical_state_stfn_balances_nodes_populated_miss_total",
|
|
66
|
+
help: "Total count state.balances nodesPopulated is false on stfn",
|
|
67
|
+
labelNames: ["source"],
|
|
68
|
+
}),
|
|
69
|
+
preStateBalancesNodesPopulatedHit: metricsRegister.gauge({
|
|
70
|
+
name: "lodestar_historical_state_stfn_balances_nodes_populated_hit_total",
|
|
71
|
+
help: "Total count state.balances nodesPopulated is true on stfn",
|
|
72
|
+
labelNames: ["source"],
|
|
73
|
+
}),
|
|
74
|
+
preStateValidatorsNodesPopulatedMiss: metricsRegister.gauge({
|
|
75
|
+
name: "lodestar_historical_state_stfn_validators_nodes_populated_miss_total",
|
|
76
|
+
help: "Total count state.validators nodesPopulated is false on stfn",
|
|
77
|
+
labelNames: ["source"],
|
|
78
|
+
}),
|
|
79
|
+
preStateValidatorsNodesPopulatedHit: metricsRegister.gauge({
|
|
80
|
+
name: "lodestar_historical_state_stfn_validators_nodes_populated_hit_total",
|
|
81
|
+
help: "Total count state.validators nodesPopulated is true on stfn",
|
|
82
|
+
labelNames: ["source"],
|
|
83
|
+
}),
|
|
84
|
+
preStateClonedCount: metricsRegister.histogram({
|
|
85
|
+
name: "lodestar_historical_state_stfn_state_cloned_count",
|
|
86
|
+
help: "Histogram of cloned count per state every time state.clone() is called",
|
|
87
|
+
buckets: [1, 2, 5, 10, 50, 250],
|
|
88
|
+
}),
|
|
89
|
+
postStateBalancesNodesPopulatedHit: metricsRegister.gauge({
|
|
90
|
+
name: "lodestar_historical_state_stfn_post_state_balances_nodes_populated_hit_total",
|
|
91
|
+
help: "Total count state.validators nodesPopulated is true on stfn for post state",
|
|
92
|
+
}),
|
|
93
|
+
postStateBalancesNodesPopulatedMiss: metricsRegister.gauge({
|
|
94
|
+
name: "lodestar_historical_state_stfn_post_state_balances_nodes_populated_miss_total",
|
|
95
|
+
help: "Total count state.validators nodesPopulated is false on stfn for post state",
|
|
96
|
+
}),
|
|
97
|
+
postStateValidatorsNodesPopulatedHit: metricsRegister.gauge({
|
|
98
|
+
name: "lodestar_historical_state_stfn_post_state_validators_nodes_populated_hit_total",
|
|
99
|
+
help: "Total count state.validators nodesPopulated is true on stfn for post state",
|
|
100
|
+
}),
|
|
101
|
+
postStateValidatorsNodesPopulatedMiss: metricsRegister.gauge({
|
|
102
|
+
name: "lodestar_historical_state_stfn_post_state_validators_nodes_populated_miss_total",
|
|
103
|
+
help: "Total count state.validators nodesPopulated is false on stfn for post state",
|
|
104
|
+
}),
|
|
105
|
+
registerValidatorStatuses: () => { },
|
|
106
|
+
// historical state regen metrics
|
|
107
|
+
regenTime: metricsRegister.histogram({
|
|
108
|
+
name: "lodestar_historical_state_regen_time_seconds",
|
|
109
|
+
help: "Time to regenerate a historical state in seconds",
|
|
110
|
+
// Historical state regen can take up to 3h as of Aug 2024
|
|
111
|
+
// 5m, 10m, 30m, 1h, 3h
|
|
112
|
+
buckets: [5 * 60, 10 * 60, 30 * 60, 60 * 60, 180 * 60],
|
|
113
|
+
}),
|
|
114
|
+
loadStateTime: metricsRegister.histogram({
|
|
115
|
+
name: "lodestar_historical_state_load_nearest_state_time_seconds",
|
|
116
|
+
help: "Time to load a nearest historical state from the database in seconds",
|
|
117
|
+
// 30s, 1m, 2m, 4m
|
|
118
|
+
buckets: [30, 60, 120, 240],
|
|
119
|
+
}),
|
|
120
|
+
stateTransitionTime: metricsRegister.histogram({
|
|
121
|
+
name: "lodestar_historical_state_state_transition_time_seconds",
|
|
122
|
+
help: "Time to run state transition to regen historical state in seconds",
|
|
123
|
+
// 5m, 10m, 30m, 1h, 3h
|
|
124
|
+
buckets: [5 * 60, 10 * 60, 30 * 60, 60 * 60, 180 * 60],
|
|
125
|
+
}),
|
|
126
|
+
stateTransitionBlocks: metricsRegister.histogram({
|
|
127
|
+
name: "lodestar_historical_state_state_transition_blocks",
|
|
128
|
+
help: "Count of blocks processed during state transition to regen historical state",
|
|
129
|
+
// given archiveStateEpochFrequency=1024, it could process up to 32768 blocks
|
|
130
|
+
buckets: [10, 100, 1000, 10000, 30000],
|
|
131
|
+
}),
|
|
132
|
+
stateSerializationTime: metricsRegister.histogram({
|
|
133
|
+
name: "lodestar_historical_state_serialization_time_seconds",
|
|
134
|
+
help: "Time to serialize a historical state in seconds",
|
|
135
|
+
buckets: [0.25, 0.5, 1, 2],
|
|
136
|
+
}),
|
|
137
|
+
regenRequestCount: metricsRegister.gauge({
|
|
138
|
+
name: "lodestar_historical_state_request_count",
|
|
139
|
+
help: "Count of total historical state requests",
|
|
140
|
+
}),
|
|
141
|
+
regenSuccessCount: metricsRegister.gauge({
|
|
142
|
+
name: "lodestar_historical_state_success_count",
|
|
143
|
+
help: "Count of successful historical state regen",
|
|
144
|
+
}),
|
|
145
|
+
regenErrorCount: metricsRegister.gauge({
|
|
146
|
+
name: "lodestar_historical_state_error_count",
|
|
147
|
+
help: "Count of failed historical state regen",
|
|
148
|
+
labelNames: ["reason"],
|
|
149
|
+
}),
|
|
150
|
+
};
|
|
151
|
+
queueMetrics = {
|
|
152
|
+
length: metricsRegister.gauge({
|
|
153
|
+
name: "lodestar_historical_state_queue_length",
|
|
154
|
+
help: "Count of total regen queue length",
|
|
155
|
+
}),
|
|
156
|
+
droppedJobs: metricsRegister.gauge({
|
|
157
|
+
name: "lodestar_historical_state_queue_dropped_jobs_total",
|
|
158
|
+
help: "Count of total regen queue dropped jobs",
|
|
159
|
+
}),
|
|
160
|
+
jobTime: metricsRegister.histogram({
|
|
161
|
+
name: "lodestar_historical_state_queue_job_time_seconds",
|
|
162
|
+
help: "Time to process regen queue job in seconds",
|
|
163
|
+
buckets: [0.01, 0.1, 1, 10, 100],
|
|
164
|
+
}),
|
|
165
|
+
jobWaitTime: metricsRegister.histogram({
|
|
166
|
+
name: "lodestar_historical_state_queue_job_wait_time_seconds",
|
|
167
|
+
help: "Time from job added to the regen queue to starting in seconds",
|
|
168
|
+
buckets: [0.01, 0.1, 1, 10, 100],
|
|
169
|
+
}),
|
|
170
|
+
concurrency: metricsRegister.gauge({
|
|
171
|
+
name: "lodestar_historical_state_queue_concurrency",
|
|
172
|
+
help: "Current concurrency of regen queue",
|
|
173
|
+
}),
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
const queue = new JobFnQueue({
|
|
177
|
+
maxConcurrency: workerData.maxConcurrency,
|
|
178
|
+
maxLength: workerData.maxLength,
|
|
179
|
+
signal: abortController.signal,
|
|
180
|
+
}, queueMetrics);
|
|
181
|
+
const pubkey2index = new PubkeyIndexMap();
|
|
182
|
+
const api = {
|
|
183
|
+
async close() {
|
|
184
|
+
abortController.abort();
|
|
185
|
+
},
|
|
186
|
+
async scrapeMetrics() {
|
|
187
|
+
return metricsRegister?.metrics() ?? "";
|
|
188
|
+
},
|
|
189
|
+
async getHistoricalState(slot) {
|
|
190
|
+
historicalStateRegenMetrics?.regenRequestCount.inc();
|
|
191
|
+
const stateBytes = await queue.push(() => getHistoricalState(slot, config, db, pubkey2index, historicalStateRegenMetrics));
|
|
192
|
+
const result = Transfer(stateBytes, [stateBytes.buffer]);
|
|
193
|
+
historicalStateRegenMetrics?.regenSuccessCount.inc();
|
|
194
|
+
return result;
|
|
195
|
+
},
|
|
196
|
+
};
|
|
197
|
+
expose(api);
|
|
198
|
+
//# sourceMappingURL=worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/chain/historicalState/worker.ts"],"names":[],"mappings":"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"}
|
package/lib/chain/interface.d.ts
CHANGED
|
@@ -97,6 +97,11 @@ export interface IBeaconChain {
|
|
|
97
97
|
getHeadState(): CachedBeaconStateAllForks;
|
|
98
98
|
getHeadStateAtCurrentEpoch(regenCaller: RegenCaller): Promise<CachedBeaconStateAllForks>;
|
|
99
99
|
getHeadStateAtEpoch(epoch: Epoch, regenCaller: RegenCaller): Promise<CachedBeaconStateAllForks>;
|
|
100
|
+
getHistoricalStateBySlot(slot: Slot): Promise<{
|
|
101
|
+
state: Uint8Array;
|
|
102
|
+
executionOptimistic: boolean;
|
|
103
|
+
finalized: boolean;
|
|
104
|
+
} | null>;
|
|
100
105
|
/** Returns a local state canonical at `slot` */
|
|
101
106
|
getStateBySlot(slot: Slot, opts?: StateGetOpts): Promise<{
|
|
102
107
|
state: BeaconStateAllForks;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { toHexString } from "@chainsafe/ssz";
|
|
2
|
-
import { fromHex, isErrorAborted, createElapsedTimeTracker,
|
|
2
|
+
import { fromHex, isErrorAborted, createElapsedTimeTracker, toPrintableUrl } from "@lodestar/utils";
|
|
3
3
|
import { isFetchError } from "@lodestar/api";
|
|
4
4
|
import { linspace } from "../../util/numpy.js";
|
|
5
5
|
import { depositEventTopics, parseDepositLog } from "../utils/depositContract.js";
|
|
@@ -33,7 +33,7 @@ export class Eth1Provider {
|
|
|
33
33
|
jwtVersion: opts.jwtVersion,
|
|
34
34
|
metrics: metrics,
|
|
35
35
|
});
|
|
36
|
-
this.logger?.info("Eth1 provider", { urls: providerUrls.map(
|
|
36
|
+
this.logger?.info("Eth1 provider", { urls: providerUrls.map(toPrintableUrl).toString() });
|
|
37
37
|
this.rpc.emitter.on(JsonRpcHttpClientEvent.RESPONSE, () => {
|
|
38
38
|
const oldState = this.state;
|
|
39
39
|
this.state = Eth1ProviderState.ONLINE;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eth1Provider.js","sourceRoot":"","sources":["../../../src/eth1/provider/eth1Provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAG3C,OAAO,EAAC,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,
|
|
1
|
+
{"version":3,"file":"eth1Provider.js","sourceRoot":"","sources":["../../../src/eth1/provider/eth1Provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { parseExecutionPayloadAndBlobsBundle, reconstructFullBlockOrContents } from "@lodestar/state-transition";
|
|
2
2
|
import { getClient } from "@lodestar/api/builder";
|
|
3
3
|
import { SLOTS_PER_EPOCH } from "@lodestar/params";
|
|
4
|
-
import {
|
|
4
|
+
import { toPrintableUrl } from "@lodestar/utils";
|
|
5
5
|
export const defaultExecutionBuilderHttpOpts = {
|
|
6
6
|
enabled: false,
|
|
7
7
|
url: "http://localhost:8661",
|
|
@@ -21,7 +21,7 @@ export class ExecutionBuilderHttp {
|
|
|
21
21
|
headers: opts.userAgent ? { "User-Agent": opts.userAgent } : undefined,
|
|
22
22
|
},
|
|
23
23
|
}, { config, metrics: metrics?.builderHttpClient });
|
|
24
|
-
logger?.info("External builder", { url:
|
|
24
|
+
logger?.info("External builder", { url: toPrintableUrl(baseUrl) });
|
|
25
25
|
this.config = config;
|
|
26
26
|
this.issueLocalFcUWithFeeRecipient = opts.issueLocalFcUWithFeeRecipient;
|
|
27
27
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/execution/builder/http.ts"],"names":[],"mappings":"AAWA,OAAO,EAAC,mCAAmC,EAAE,8BAA8B,EAAC,MAAM,4BAA4B,CAAC;AAG/G,OAAO,EAAC,SAAS,EAA0B,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAC,eAAe,EAAgB,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/execution/builder/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { ForkName } from "@lodestar/params";
|
|
|
3
3
|
import { Logger } from "@lodestar/logger";
|
|
4
4
|
import { IJsonRpcHttpClient } from "../../eth1/provider/jsonRpcHttpClient.js";
|
|
5
5
|
import { Metrics } from "../../metrics/index.js";
|
|
6
|
-
import { ExecutePayloadResponse, IExecutionEngine, PayloadId, PayloadAttributes, BlobsBundle, VersionedHashes, ExecutionEngineState } from "./interface.js";
|
|
6
|
+
import { ExecutePayloadResponse, IExecutionEngine, PayloadId, PayloadAttributes, BlobsBundle, VersionedHashes, ExecutionEngineState, ClientVersion } from "./interface.js";
|
|
7
7
|
import { PayloadIdCache } from "./payloadIdCache.js";
|
|
8
8
|
import { ExecutionPayloadBody } from "./types.js";
|
|
9
9
|
export type ExecutionEngineModules = {
|
|
@@ -31,6 +31,14 @@ export type ExecutionEngineHttpOpts = {
|
|
|
31
31
|
* A version string that will be set in `clv` field of jwt claims
|
|
32
32
|
*/
|
|
33
33
|
jwtVersion?: string;
|
|
34
|
+
/**
|
|
35
|
+
* Lodestar version to be used for `ClientVersion`
|
|
36
|
+
*/
|
|
37
|
+
version?: string;
|
|
38
|
+
/**
|
|
39
|
+
* Lodestar commit to be used for `ClientVersion`
|
|
40
|
+
*/
|
|
41
|
+
commit?: string;
|
|
34
42
|
};
|
|
35
43
|
export declare const defaultExecutionEngineHttpOpts: ExecutionEngineHttpOpts;
|
|
36
44
|
/**
|
|
@@ -44,8 +52,11 @@ export declare const defaultExecutionEngineHttpOpts: ExecutionEngineHttpOpts;
|
|
|
44
52
|
*/
|
|
45
53
|
export declare class ExecutionEngineHttp implements IExecutionEngine {
|
|
46
54
|
private readonly rpc;
|
|
55
|
+
private readonly opts?;
|
|
47
56
|
private logger;
|
|
48
57
|
state: ExecutionEngineState;
|
|
58
|
+
/** Cached EL client version from the latest getClientVersion call */
|
|
59
|
+
clientVersion?: ClientVersion | null;
|
|
49
60
|
readonly payloadIdCache: PayloadIdCache;
|
|
50
61
|
/**
|
|
51
62
|
* A queue to serialize the fcUs and newPayloads calls:
|
|
@@ -58,7 +69,7 @@ export declare class ExecutionEngineHttp implements IExecutionEngine {
|
|
|
58
69
|
*/
|
|
59
70
|
private readonly rpcFetchQueue;
|
|
60
71
|
private jobQueueProcessor;
|
|
61
|
-
constructor(rpc: IJsonRpcHttpClient, { metrics, signal, logger }: ExecutionEngineModules);
|
|
72
|
+
constructor(rpc: IJsonRpcHttpClient, { metrics, signal, logger }: ExecutionEngineModules, opts?: ExecutionEngineHttpOpts | undefined);
|
|
62
73
|
/**
|
|
63
74
|
* `engine_newPayloadV1`
|
|
64
75
|
* From: https://github.com/ethereum/execution-apis/blob/v1.0.0-alpha.6/src/engine/specification.md#engine_newpayloadv1
|
|
@@ -132,6 +143,7 @@ export declare class ExecutionEngineHttp implements IExecutionEngine {
|
|
|
132
143
|
prunePayloadIdCache(): Promise<void>;
|
|
133
144
|
getPayloadBodiesByHash(blockHashes: RootHex[]): Promise<(ExecutionPayloadBody | null)[]>;
|
|
134
145
|
getPayloadBodiesByRange(startBlockNumber: number, blockCount: number): Promise<(ExecutionPayloadBody | null)[]>;
|
|
146
|
+
private getClientVersion;
|
|
135
147
|
private updateEngineState;
|
|
136
148
|
}
|
|
137
149
|
//# sourceMappingURL=http.d.ts.map
|