@chainsafe/lodestar 1.51.0-dev.fe53cec080 → 1.51.0-rc.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.
- package/.git-data.json +2 -2
- package/lib/cmds/builder/handler.d.ts.map +1 -1
- package/lib/cmds/builder/handler.js +48 -3
- package/lib/cmds/builder/handler.js.map +1 -1
- package/lib/cmds/builder/options.d.ts +13 -0
- package/lib/cmds/builder/options.d.ts.map +1 -1
- package/lib/cmds/builder/options.js +83 -1
- package/lib/cmds/builder/options.js.map +1 -1
- package/lib/cmds/validator/handler.d.ts.map +1 -1
- package/lib/cmds/validator/handler.js +12 -2
- package/lib/cmds/validator/handler.js.map +1 -1
- package/package.json +17 -14
- package/src/cmds/builder/handler.ts +68 -3
- package/src/cmds/builder/options.ts +118 -1
- package/src/cmds/validator/handler.ts +10 -1
package/.git-data.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/cmds/builder/handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/cmds/builder/handler.ts"],"names":[],"mappings":"AAcA,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAWlD,OAAO,EAAC,eAAe,EAA+B,MAAM,cAAc,CAAC;AAI3E,wBAAsB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAwHtF"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
1
2
|
import path from "node:path";
|
|
2
3
|
import { getClient } from "@lodestar/api";
|
|
3
|
-
import { RegistryMetricCreator, collectNodeJSMetrics, getHttpMetricsServer } from "@lodestar/beacon-node";
|
|
4
|
-
import { Builder, getMetrics } from "@lodestar/builder";
|
|
4
|
+
import { RegistryMetricCreator, collectNodeJSMetrics, defaultExecutionEngineHttpOpts, getHttpMetricsServer, initializeExecutionEngine, } from "@lodestar/beacon-node";
|
|
5
|
+
import { Builder, EnginePayloadSource, getMetrics } from "@lodestar/builder";
|
|
5
6
|
import { getNodeLogger } from "@lodestar/logger/node";
|
|
6
7
|
import { fromHex, toPrintableUrl } from "@lodestar/utils";
|
|
7
8
|
import { getBeaconConfigFromArgs } from "../../config/beaconParams.js";
|
|
8
9
|
import { getGlobalPaths } from "../../paths/global.js";
|
|
9
|
-
import { cleanOldLogFiles, onGracefulShutdown, parseFeeRecipient, parseLoggerArgs } from "../../util/index.js";
|
|
10
|
+
import { cleanOldLogFiles, extractJwtHexSecret, onGracefulShutdown, parseFeeRecipient, parseLoggerArgs, } from "../../util/index.js";
|
|
10
11
|
import { getVersionData } from "../../util/version.js";
|
|
11
12
|
import { loadBuilderKeypair } from "./loadKeypair.js";
|
|
12
13
|
import { builderMetricsDefaultOptions } from "./options.js";
|
|
@@ -51,6 +52,39 @@ export async function builderHandler(args) {
|
|
|
51
52
|
}
|
|
52
53
|
const api = getClient({ urls: [args.beaconNodeUrl], globalInit: { signal: abortController.signal, timeoutMs: args.requestTimeout } }, { config, logger, metrics: metrics?.restApiClient });
|
|
53
54
|
logger.info("Beacon node", { beaconNode: toPrintableUrl(args.beaconNodeUrl), timeoutMs: args.requestTimeout });
|
|
55
|
+
// Payload ids are local to the execution client that issued them, fallback urls can't be used
|
|
56
|
+
if (args["execution.urls"].length !== 1) {
|
|
57
|
+
throw Error("Exactly one execution client url is required");
|
|
58
|
+
}
|
|
59
|
+
const executionUrl = args["execution.urls"][0];
|
|
60
|
+
const engine = initializeExecutionEngine({
|
|
61
|
+
mode: "http",
|
|
62
|
+
urls: [executionUrl],
|
|
63
|
+
timeout: args["execution.timeout"] ?? defaultExecutionEngineHttpOpts.timeout,
|
|
64
|
+
retries: args["execution.retries"],
|
|
65
|
+
retryDelay: args["execution.retryDelay"],
|
|
66
|
+
jwtSecretHex: args["execution.jwtSecret"]
|
|
67
|
+
? extractJwtHexSecret(fs.readFileSync(args["execution.jwtSecret"], "utf-8").trim())
|
|
68
|
+
: undefined,
|
|
69
|
+
version,
|
|
70
|
+
commit,
|
|
71
|
+
}, { signal: abortController.signal, logger });
|
|
72
|
+
const payloadSource = new EnginePayloadSource(toPrintableUrl(executionUrl), {
|
|
73
|
+
notifyForkchoiceUpdate: async (fork, headBlockHash, safeBlockHash, finalizedBlockHash, payloadAttributes) => {
|
|
74
|
+
try {
|
|
75
|
+
return await engine.notifyForkchoiceUpdate(fork, headBlockHash, safeBlockHash, finalizedBlockHash, payloadAttributes);
|
|
76
|
+
}
|
|
77
|
+
catch (e) {
|
|
78
|
+
// Only retry while the execution client is syncing, it has not imported the parent payload yet.
|
|
79
|
+
// The engine interface does not expose the fcU status, this matches the error thrown for the SYNCING status
|
|
80
|
+
// in ExecutionEngineHttp.notifyForkchoiceUpdate until a typed error is added to the beacon node
|
|
81
|
+
if (e instanceof Error && e.message === "Execution Layer Syncing")
|
|
82
|
+
return null;
|
|
83
|
+
throw e;
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
getPayload: async (fork, payloadId) => (await engine.getPayload(fork, payloadId)),
|
|
87
|
+
});
|
|
54
88
|
const builder = await Builder.init({
|
|
55
89
|
keypair,
|
|
56
90
|
logger,
|
|
@@ -59,6 +93,17 @@ export async function builderHandler(args) {
|
|
|
59
93
|
api,
|
|
60
94
|
executionFeeRecipient: fromHex(executionFeeRecipient),
|
|
61
95
|
metrics,
|
|
96
|
+
payloadSource,
|
|
97
|
+
bidding: {
|
|
98
|
+
shareBps: args["bidding.shareBps"],
|
|
99
|
+
fixedCostGwei: args["bidding.fixedCostGwei"],
|
|
100
|
+
minValueGwei: args["bidding.minValueGwei"],
|
|
101
|
+
maxValueGwei: args["bidding.maxValueGwei"],
|
|
102
|
+
deadlineBps: args["bidding.deadlineBps"],
|
|
103
|
+
getPayloadTimeout: args["bidding.getPayloadTimeout"],
|
|
104
|
+
minOperatingBalanceGwei: args["bidding.minOperatingBalanceGwei"],
|
|
105
|
+
},
|
|
106
|
+
reveal: { cutoffBps: args["reveal.cutoffBps"] },
|
|
62
107
|
});
|
|
63
108
|
onGracefulShutdownCbs.push(() => builder.close());
|
|
64
109
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/cmds/builder/handler.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAC,SAAS,EAAC,MAAM,eAAe,CAAC;AACxC,OAAO,
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/cmds/builder/handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,19 @@ export type IBuilderCliArgs = LogArgs & {
|
|
|
12
12
|
builderPubkey?: string;
|
|
13
13
|
executionFeeRecipient: string;
|
|
14
14
|
requestTimeout: number;
|
|
15
|
+
"execution.urls": string[];
|
|
16
|
+
"execution.timeout"?: number;
|
|
17
|
+
"execution.retries": number;
|
|
18
|
+
"execution.retryDelay": number;
|
|
19
|
+
"execution.jwtSecret"?: string;
|
|
20
|
+
"bidding.shareBps": number;
|
|
21
|
+
"bidding.fixedCostGwei": number;
|
|
22
|
+
"bidding.minValueGwei": number;
|
|
23
|
+
"bidding.maxValueGwei"?: number;
|
|
24
|
+
"bidding.deadlineBps": number;
|
|
25
|
+
"bidding.getPayloadTimeout": number;
|
|
26
|
+
"bidding.minOperatingBalanceGwei": number;
|
|
27
|
+
"reveal.cutoffBps"?: number;
|
|
15
28
|
metrics?: boolean;
|
|
16
29
|
"metrics.port"?: number;
|
|
17
30
|
"metrics.address"?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../src/cmds/builder/options.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../src/cmds/builder/options.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,iBAAiB,EAAC,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAC,OAAO,EAAa,MAAM,6BAA6B,CAAC;AAEhE,eAAO,MAAM,4BAA4B;IACvC,OAAO;IACP,IAAI;IACJ,OAAO;CACR,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IAEvB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,uBAAuB,EAAE,MAAM,CAAC;IAChC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,2BAA2B,EAAE,MAAM,CAAC;IACpC,iCAAiC,EAAE,MAAM,CAAC;IAC1C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,iBAAiB,CAAC,eAAe,CAiK7D,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { defaultExecutionEngineHttpOpts } from "@lodestar/beacon-node";
|
|
1
2
|
import { defaultOptions } from "@lodestar/builder";
|
|
2
3
|
import { logOptions } from "../../options/logOptions.js";
|
|
3
4
|
export const builderMetricsDefaultOptions = {
|
|
@@ -8,7 +9,7 @@ export const builderMetricsDefaultOptions = {
|
|
|
8
9
|
export const builderOptions = {
|
|
9
10
|
...logOptions,
|
|
10
11
|
beaconNodeUrl: {
|
|
11
|
-
description: "
|
|
12
|
+
description: "URL of the beacon node. It must run with `--emitPayloadAttributes` to emit payload attributes for every slot",
|
|
12
13
|
type: "string",
|
|
13
14
|
default: defaultOptions.beaconNodeUrl,
|
|
14
15
|
},
|
|
@@ -36,6 +37,87 @@ export const builderOptions = {
|
|
|
36
37
|
type: "number",
|
|
37
38
|
default: defaultOptions.requestTimeout,
|
|
38
39
|
},
|
|
40
|
+
// Execution
|
|
41
|
+
"execution.urls": {
|
|
42
|
+
description: "Url to the execution client engine API that builds the payloads. The execution client must be kept in sync by a beacon node",
|
|
43
|
+
default: defaultExecutionEngineHttpOpts.urls.join(","),
|
|
44
|
+
type: "array",
|
|
45
|
+
string: true,
|
|
46
|
+
coerce: (urls) =>
|
|
47
|
+
// Parse ["url1,url2"] to ["url1", "url2"]
|
|
48
|
+
urls.flatMap((item) => item.split(",")),
|
|
49
|
+
group: "execution",
|
|
50
|
+
},
|
|
51
|
+
"execution.timeout": {
|
|
52
|
+
description: "Timeout in milliseconds for execution engine API HTTP client",
|
|
53
|
+
type: "number",
|
|
54
|
+
defaultDescription: String(defaultExecutionEngineHttpOpts.timeout),
|
|
55
|
+
group: "execution",
|
|
56
|
+
},
|
|
57
|
+
"execution.retries": {
|
|
58
|
+
description: "Number of retries when calling execution engine API",
|
|
59
|
+
type: "number",
|
|
60
|
+
default: defaultExecutionEngineHttpOpts.retries,
|
|
61
|
+
group: "execution",
|
|
62
|
+
},
|
|
63
|
+
"execution.retryDelay": {
|
|
64
|
+
description: "Delay time in milliseconds between retries when retrying calls to the execution engine API",
|
|
65
|
+
type: "number",
|
|
66
|
+
default: defaultExecutionEngineHttpOpts.retryDelay,
|
|
67
|
+
group: "execution",
|
|
68
|
+
},
|
|
69
|
+
"execution.jwtSecret": {
|
|
70
|
+
description: "File path to a shared hex-encoded jwt secret which will be used to generate and bundle HS256 encoded jwt tokens for authentication with the EL client's rpc server hosting engine apis. Secret to be exactly same as the one used by the corresponding EL client.",
|
|
71
|
+
type: "string",
|
|
72
|
+
group: "execution",
|
|
73
|
+
},
|
|
74
|
+
// Bidding
|
|
75
|
+
"bidding.shareBps": {
|
|
76
|
+
description: "Share of the payload value offered to the proposer, in basis points",
|
|
77
|
+
type: "number",
|
|
78
|
+
default: defaultOptions.bidding.shareBps,
|
|
79
|
+
group: "bidding",
|
|
80
|
+
},
|
|
81
|
+
"bidding.fixedCostGwei": {
|
|
82
|
+
description: "Fixed amount in gwei deducted from the proposer share of every bid",
|
|
83
|
+
type: "number",
|
|
84
|
+
default: defaultOptions.bidding.fixedCostGwei,
|
|
85
|
+
group: "bidding",
|
|
86
|
+
},
|
|
87
|
+
"bidding.minValueGwei": {
|
|
88
|
+
description: "Never bid below this value in gwei",
|
|
89
|
+
type: "number",
|
|
90
|
+
default: defaultOptions.bidding.minValueGwei,
|
|
91
|
+
group: "bidding",
|
|
92
|
+
},
|
|
93
|
+
"bidding.maxValueGwei": {
|
|
94
|
+
description: "Never bid above this value in gwei",
|
|
95
|
+
type: "number",
|
|
96
|
+
group: "bidding",
|
|
97
|
+
},
|
|
98
|
+
"bidding.deadlineBps": {
|
|
99
|
+
description: "Point within the slot before the proposal slot at which the payload is retrieved and the bid is published, in basis points",
|
|
100
|
+
type: "number",
|
|
101
|
+
default: defaultOptions.bidding.deadlineBps,
|
|
102
|
+
group: "bidding",
|
|
103
|
+
},
|
|
104
|
+
"bidding.getPayloadTimeout": {
|
|
105
|
+
description: "Timeout in milliseconds for retrieving the payload from the execution client at the bid deadline",
|
|
106
|
+
type: "number",
|
|
107
|
+
default: defaultOptions.bidding.getPayloadTimeout,
|
|
108
|
+
group: "bidding",
|
|
109
|
+
},
|
|
110
|
+
"bidding.minOperatingBalanceGwei": {
|
|
111
|
+
description: "Do not bid while the builder balance is below this value in gwei",
|
|
112
|
+
type: "number",
|
|
113
|
+
default: defaultOptions.bidding.minOperatingBalanceGwei,
|
|
114
|
+
group: "bidding",
|
|
115
|
+
},
|
|
116
|
+
"reveal.cutoffBps": {
|
|
117
|
+
description: "Do not reveal the payload if the block committing to our bid arrives after this point within its slot, in basis points. Defaults to PAYLOAD_ATTESTATION_DUE_BPS of the network",
|
|
118
|
+
type: "number",
|
|
119
|
+
group: "reveal",
|
|
120
|
+
},
|
|
39
121
|
// Metrics
|
|
40
122
|
metrics: {
|
|
41
123
|
description: "Enable the Prometheus metrics HTTP server",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../../src/cmds/builder/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAC,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAU,UAAU,EAAC,MAAM,6BAA6B,CAAC;AAEhE,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,WAAW;CACrB,CAAC;
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../../src/cmds/builder/options.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/cmds/validator/handler.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAsBlD,OAAO,EAAC,iBAAiB,EAAoE,MAAM,cAAc,CAAC;AAKlH;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/cmds/validator/handler.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAsBlD,OAAO,EAAC,iBAAiB,EAAoE,MAAM,cAAc,CAAC;AAKlH;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAuM1F"}
|
|
@@ -43,8 +43,18 @@ export async function validatorHandler(args) {
|
|
|
43
43
|
mkdir(dbPath);
|
|
44
44
|
const onGracefulShutdownCbs = [];
|
|
45
45
|
onGracefulShutdown(async () => {
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
let exitCode = 0;
|
|
47
|
+
try {
|
|
48
|
+
for (const cb of onGracefulShutdownCbs)
|
|
49
|
+
await cb();
|
|
50
|
+
logger.debug("Validator client closed");
|
|
51
|
+
}
|
|
52
|
+
catch (e) {
|
|
53
|
+
logger.warn("Error closing validator client", {}, e);
|
|
54
|
+
exitCode = 1;
|
|
55
|
+
}
|
|
56
|
+
// Explicitly exit process due to potential active handles (e.g. EventSource / in-flight HTTP via DVT middleware)
|
|
57
|
+
process.exit(exitCode);
|
|
48
58
|
}, logger.info.bind(logger));
|
|
49
59
|
// Callback for validator to request forced exit, in case of doppelganger detection
|
|
50
60
|
const processShutdownCallback = (err) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/cmds/validator/handler.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/cmds/validator/handler.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.51.0-
|
|
3
|
+
"version": "1.51.0-rc.0",
|
|
4
4
|
"description": "Command line interface for lodestar",
|
|
5
5
|
"author": "ChainSafe Systems",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -9,6 +9,9 @@
|
|
|
9
9
|
},
|
|
10
10
|
"homepage": "https://github.com/ChainSafe/lodestar#readme",
|
|
11
11
|
"type": "module",
|
|
12
|
+
"engines": {
|
|
13
|
+
"node": "^24.22.1"
|
|
14
|
+
},
|
|
12
15
|
"exports": {
|
|
13
16
|
".": {
|
|
14
17
|
"typescript": "./src/index.ts",
|
|
@@ -68,17 +71,17 @@
|
|
|
68
71
|
"@libp2p/crypto": "^5.1.25",
|
|
69
72
|
"@libp2p/interface": "^3.4.0",
|
|
70
73
|
"@libp2p/peer-id": "^6.0.17",
|
|
71
|
-
"@lodestar/api": "^1.51.0-
|
|
72
|
-
"@lodestar/beacon-node": "^1.51.0-
|
|
73
|
-
"@lodestar/builder": "^1.51.0-
|
|
74
|
-
"@lodestar/config": "^1.51.0-
|
|
75
|
-
"@lodestar/db": "^1.51.0-
|
|
76
|
-
"@lodestar/logger": "^1.51.0-
|
|
77
|
-
"@lodestar/params": "^1.51.0-
|
|
78
|
-
"@lodestar/state-transition": "^1.51.0-
|
|
79
|
-
"@lodestar/types": "^1.51.0-
|
|
80
|
-
"@lodestar/utils": "^1.51.0-
|
|
81
|
-
"@lodestar/validator": "^1.51.0-
|
|
74
|
+
"@lodestar/api": "^1.51.0-rc.0",
|
|
75
|
+
"@lodestar/beacon-node": "^1.51.0-rc.0",
|
|
76
|
+
"@lodestar/builder": "^1.51.0-rc.0",
|
|
77
|
+
"@lodestar/config": "^1.51.0-rc.0",
|
|
78
|
+
"@lodestar/db": "^1.51.0-rc.0",
|
|
79
|
+
"@lodestar/logger": "^1.51.0-rc.0",
|
|
80
|
+
"@lodestar/params": "^1.51.0-rc.0",
|
|
81
|
+
"@lodestar/state-transition": "^1.51.0-rc.0",
|
|
82
|
+
"@lodestar/types": "^1.51.0-rc.0",
|
|
83
|
+
"@lodestar/utils": "^1.51.0-rc.0",
|
|
84
|
+
"@lodestar/validator": "^1.51.0-rc.0",
|
|
82
85
|
"@multiformats/multiaddr": "^13.0.1",
|
|
83
86
|
"deepmerge": "^4.3.1",
|
|
84
87
|
"ethers": "^6.7.0",
|
|
@@ -94,7 +97,7 @@
|
|
|
94
97
|
"devDependencies": {
|
|
95
98
|
"@chainsafe/as-sha256": "^1.2.5",
|
|
96
99
|
"@ethereumjs/rlp": "^4.0.1",
|
|
97
|
-
"@lodestar/test-utils": "^1.51.0-
|
|
100
|
+
"@lodestar/test-utils": "^1.51.0-rc.0",
|
|
98
101
|
"@types/debug": "^4.1.7",
|
|
99
102
|
"@types/inquirer": "^9.0.3",
|
|
100
103
|
"@types/js-yaml": "^4.0.5",
|
|
@@ -108,5 +111,5 @@
|
|
|
108
111
|
"web3": "^4.0.3",
|
|
109
112
|
"web3-eth-accounts": "^4.0.3"
|
|
110
113
|
},
|
|
111
|
-
"gitHead": "
|
|
114
|
+
"gitHead": "b1c04f7191701d3950f992a1e31e498a4af72066"
|
|
112
115
|
}
|
|
@@ -1,13 +1,26 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
1
2
|
import path from "node:path";
|
|
2
3
|
import {getClient} from "@lodestar/api";
|
|
3
|
-
import {
|
|
4
|
-
|
|
4
|
+
import {
|
|
5
|
+
RegistryMetricCreator,
|
|
6
|
+
collectNodeJSMetrics,
|
|
7
|
+
defaultExecutionEngineHttpOpts,
|
|
8
|
+
getHttpMetricsServer,
|
|
9
|
+
initializeExecutionEngine,
|
|
10
|
+
} from "@lodestar/beacon-node";
|
|
11
|
+
import {Builder, EnginePayloadResult, EnginePayloadSource, getMetrics} from "@lodestar/builder";
|
|
5
12
|
import {getNodeLogger} from "@lodestar/logger/node";
|
|
6
13
|
import {fromHex, toPrintableUrl} from "@lodestar/utils";
|
|
7
14
|
import {getBeaconConfigFromArgs} from "../../config/beaconParams.js";
|
|
8
15
|
import {GlobalArgs} from "../../options/index.js";
|
|
9
16
|
import {getGlobalPaths} from "../../paths/global.js";
|
|
10
|
-
import {
|
|
17
|
+
import {
|
|
18
|
+
cleanOldLogFiles,
|
|
19
|
+
extractJwtHexSecret,
|
|
20
|
+
onGracefulShutdown,
|
|
21
|
+
parseFeeRecipient,
|
|
22
|
+
parseLoggerArgs,
|
|
23
|
+
} from "../../util/index.js";
|
|
11
24
|
import {getVersionData} from "../../util/version.js";
|
|
12
25
|
import {loadBuilderKeypair} from "./loadKeypair.js";
|
|
13
26
|
import {IBuilderCliArgs, builderMetricsDefaultOptions} from "./options.js";
|
|
@@ -71,6 +84,47 @@ export async function builderHandler(args: IBuilderCliArgs & GlobalArgs): Promis
|
|
|
71
84
|
|
|
72
85
|
logger.info("Beacon node", {beaconNode: toPrintableUrl(args.beaconNodeUrl), timeoutMs: args.requestTimeout});
|
|
73
86
|
|
|
87
|
+
// Payload ids are local to the execution client that issued them, fallback urls can't be used
|
|
88
|
+
if (args["execution.urls"].length !== 1) {
|
|
89
|
+
throw Error("Exactly one execution client url is required");
|
|
90
|
+
}
|
|
91
|
+
const executionUrl = args["execution.urls"][0];
|
|
92
|
+
const engine = initializeExecutionEngine(
|
|
93
|
+
{
|
|
94
|
+
mode: "http",
|
|
95
|
+
urls: [executionUrl],
|
|
96
|
+
timeout: args["execution.timeout"] ?? defaultExecutionEngineHttpOpts.timeout,
|
|
97
|
+
retries: args["execution.retries"],
|
|
98
|
+
retryDelay: args["execution.retryDelay"],
|
|
99
|
+
jwtSecretHex: args["execution.jwtSecret"]
|
|
100
|
+
? extractJwtHexSecret(fs.readFileSync(args["execution.jwtSecret"], "utf-8").trim())
|
|
101
|
+
: undefined,
|
|
102
|
+
version,
|
|
103
|
+
commit,
|
|
104
|
+
},
|
|
105
|
+
{signal: abortController.signal, logger}
|
|
106
|
+
);
|
|
107
|
+
const payloadSource = new EnginePayloadSource(toPrintableUrl(executionUrl), {
|
|
108
|
+
notifyForkchoiceUpdate: async (fork, headBlockHash, safeBlockHash, finalizedBlockHash, payloadAttributes) => {
|
|
109
|
+
try {
|
|
110
|
+
return await engine.notifyForkchoiceUpdate(
|
|
111
|
+
fork,
|
|
112
|
+
headBlockHash,
|
|
113
|
+
safeBlockHash,
|
|
114
|
+
finalizedBlockHash,
|
|
115
|
+
payloadAttributes
|
|
116
|
+
);
|
|
117
|
+
} catch (e) {
|
|
118
|
+
// Only retry while the execution client is syncing, it has not imported the parent payload yet.
|
|
119
|
+
// The engine interface does not expose the fcU status, this matches the error thrown for the SYNCING status
|
|
120
|
+
// in ExecutionEngineHttp.notifyForkchoiceUpdate until a typed error is added to the beacon node
|
|
121
|
+
if (e instanceof Error && e.message === "Execution Layer Syncing") return null;
|
|
122
|
+
throw e;
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
getPayload: async (fork, payloadId) => (await engine.getPayload(fork, payloadId)) as EnginePayloadResult,
|
|
126
|
+
});
|
|
127
|
+
|
|
74
128
|
const builder = await Builder.init({
|
|
75
129
|
keypair,
|
|
76
130
|
logger,
|
|
@@ -79,6 +133,17 @@ export async function builderHandler(args: IBuilderCliArgs & GlobalArgs): Promis
|
|
|
79
133
|
api,
|
|
80
134
|
executionFeeRecipient: fromHex(executionFeeRecipient),
|
|
81
135
|
metrics,
|
|
136
|
+
payloadSource,
|
|
137
|
+
bidding: {
|
|
138
|
+
shareBps: args["bidding.shareBps"],
|
|
139
|
+
fixedCostGwei: args["bidding.fixedCostGwei"],
|
|
140
|
+
minValueGwei: args["bidding.minValueGwei"],
|
|
141
|
+
maxValueGwei: args["bidding.maxValueGwei"],
|
|
142
|
+
deadlineBps: args["bidding.deadlineBps"],
|
|
143
|
+
getPayloadTimeout: args["bidding.getPayloadTimeout"],
|
|
144
|
+
minOperatingBalanceGwei: args["bidding.minOperatingBalanceGwei"],
|
|
145
|
+
},
|
|
146
|
+
reveal: {cutoffBps: args["reveal.cutoffBps"]},
|
|
82
147
|
});
|
|
83
148
|
|
|
84
149
|
onGracefulShutdownCbs.push(() => builder.close());
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import {defaultExecutionEngineHttpOpts} from "@lodestar/beacon-node";
|
|
1
2
|
import {defaultOptions} from "@lodestar/builder";
|
|
2
3
|
import {CliCommandOptions} from "@lodestar/utils";
|
|
3
4
|
import {LogArgs, logOptions} from "../../options/logOptions.js";
|
|
@@ -16,6 +17,21 @@ export type IBuilderCliArgs = LogArgs & {
|
|
|
16
17
|
executionFeeRecipient: string;
|
|
17
18
|
requestTimeout: number;
|
|
18
19
|
|
|
20
|
+
"execution.urls": string[];
|
|
21
|
+
"execution.timeout"?: number;
|
|
22
|
+
"execution.retries": number;
|
|
23
|
+
"execution.retryDelay": number;
|
|
24
|
+
"execution.jwtSecret"?: string;
|
|
25
|
+
|
|
26
|
+
"bidding.shareBps": number;
|
|
27
|
+
"bidding.fixedCostGwei": number;
|
|
28
|
+
"bidding.minValueGwei": number;
|
|
29
|
+
"bidding.maxValueGwei"?: number;
|
|
30
|
+
"bidding.deadlineBps": number;
|
|
31
|
+
"bidding.getPayloadTimeout": number;
|
|
32
|
+
"bidding.minOperatingBalanceGwei": number;
|
|
33
|
+
"reveal.cutoffBps"?: number;
|
|
34
|
+
|
|
19
35
|
metrics?: boolean;
|
|
20
36
|
"metrics.port"?: number;
|
|
21
37
|
"metrics.address"?: string;
|
|
@@ -25,7 +41,8 @@ export const builderOptions: CliCommandOptions<IBuilderCliArgs> = {
|
|
|
25
41
|
...logOptions,
|
|
26
42
|
|
|
27
43
|
beaconNodeUrl: {
|
|
28
|
-
description:
|
|
44
|
+
description:
|
|
45
|
+
"URL of the beacon node. It must run with `--emitPayloadAttributes` to emit payload attributes for every slot",
|
|
29
46
|
type: "string",
|
|
30
47
|
default: defaultOptions.beaconNodeUrl,
|
|
31
48
|
},
|
|
@@ -59,6 +76,106 @@ export const builderOptions: CliCommandOptions<IBuilderCliArgs> = {
|
|
|
59
76
|
default: defaultOptions.requestTimeout,
|
|
60
77
|
},
|
|
61
78
|
|
|
79
|
+
// Execution
|
|
80
|
+
|
|
81
|
+
"execution.urls": {
|
|
82
|
+
description:
|
|
83
|
+
"Url to the execution client engine API that builds the payloads. The execution client must be kept in sync by a beacon node",
|
|
84
|
+
default: defaultExecutionEngineHttpOpts.urls.join(","),
|
|
85
|
+
type: "array",
|
|
86
|
+
string: true,
|
|
87
|
+
coerce: (urls: string[]): string[] =>
|
|
88
|
+
// Parse ["url1,url2"] to ["url1", "url2"]
|
|
89
|
+
urls.flatMap((item) => item.split(",")),
|
|
90
|
+
group: "execution",
|
|
91
|
+
},
|
|
92
|
+
|
|
93
|
+
"execution.timeout": {
|
|
94
|
+
description: "Timeout in milliseconds for execution engine API HTTP client",
|
|
95
|
+
type: "number",
|
|
96
|
+
defaultDescription: String(defaultExecutionEngineHttpOpts.timeout),
|
|
97
|
+
group: "execution",
|
|
98
|
+
},
|
|
99
|
+
|
|
100
|
+
"execution.retries": {
|
|
101
|
+
description: "Number of retries when calling execution engine API",
|
|
102
|
+
type: "number",
|
|
103
|
+
default: defaultExecutionEngineHttpOpts.retries,
|
|
104
|
+
group: "execution",
|
|
105
|
+
},
|
|
106
|
+
|
|
107
|
+
"execution.retryDelay": {
|
|
108
|
+
description: "Delay time in milliseconds between retries when retrying calls to the execution engine API",
|
|
109
|
+
type: "number",
|
|
110
|
+
default: defaultExecutionEngineHttpOpts.retryDelay,
|
|
111
|
+
group: "execution",
|
|
112
|
+
},
|
|
113
|
+
|
|
114
|
+
"execution.jwtSecret": {
|
|
115
|
+
description:
|
|
116
|
+
"File path to a shared hex-encoded jwt secret which will be used to generate and bundle HS256 encoded jwt tokens for authentication with the EL client's rpc server hosting engine apis. Secret to be exactly same as the one used by the corresponding EL client.",
|
|
117
|
+
type: "string",
|
|
118
|
+
group: "execution",
|
|
119
|
+
},
|
|
120
|
+
|
|
121
|
+
// Bidding
|
|
122
|
+
|
|
123
|
+
"bidding.shareBps": {
|
|
124
|
+
description: "Share of the payload value offered to the proposer, in basis points",
|
|
125
|
+
type: "number",
|
|
126
|
+
default: defaultOptions.bidding.shareBps,
|
|
127
|
+
group: "bidding",
|
|
128
|
+
},
|
|
129
|
+
|
|
130
|
+
"bidding.fixedCostGwei": {
|
|
131
|
+
description: "Fixed amount in gwei deducted from the proposer share of every bid",
|
|
132
|
+
type: "number",
|
|
133
|
+
default: defaultOptions.bidding.fixedCostGwei,
|
|
134
|
+
group: "bidding",
|
|
135
|
+
},
|
|
136
|
+
|
|
137
|
+
"bidding.minValueGwei": {
|
|
138
|
+
description: "Never bid below this value in gwei",
|
|
139
|
+
type: "number",
|
|
140
|
+
default: defaultOptions.bidding.minValueGwei,
|
|
141
|
+
group: "bidding",
|
|
142
|
+
},
|
|
143
|
+
|
|
144
|
+
"bidding.maxValueGwei": {
|
|
145
|
+
description: "Never bid above this value in gwei",
|
|
146
|
+
type: "number",
|
|
147
|
+
group: "bidding",
|
|
148
|
+
},
|
|
149
|
+
|
|
150
|
+
"bidding.deadlineBps": {
|
|
151
|
+
description:
|
|
152
|
+
"Point within the slot before the proposal slot at which the payload is retrieved and the bid is published, in basis points",
|
|
153
|
+
type: "number",
|
|
154
|
+
default: defaultOptions.bidding.deadlineBps,
|
|
155
|
+
group: "bidding",
|
|
156
|
+
},
|
|
157
|
+
|
|
158
|
+
"bidding.getPayloadTimeout": {
|
|
159
|
+
description: "Timeout in milliseconds for retrieving the payload from the execution client at the bid deadline",
|
|
160
|
+
type: "number",
|
|
161
|
+
default: defaultOptions.bidding.getPayloadTimeout,
|
|
162
|
+
group: "bidding",
|
|
163
|
+
},
|
|
164
|
+
|
|
165
|
+
"bidding.minOperatingBalanceGwei": {
|
|
166
|
+
description: "Do not bid while the builder balance is below this value in gwei",
|
|
167
|
+
type: "number",
|
|
168
|
+
default: defaultOptions.bidding.minOperatingBalanceGwei,
|
|
169
|
+
group: "bidding",
|
|
170
|
+
},
|
|
171
|
+
|
|
172
|
+
"reveal.cutoffBps": {
|
|
173
|
+
description:
|
|
174
|
+
"Do not reveal the payload if the block committing to our bid arrives after this point within its slot, in basis points. Defaults to PAYLOAD_ATTESTATION_DUE_BPS of the network",
|
|
175
|
+
type: "number",
|
|
176
|
+
group: "reveal",
|
|
177
|
+
},
|
|
178
|
+
|
|
62
179
|
// Metrics
|
|
63
180
|
|
|
64
181
|
metrics: {
|
|
@@ -77,7 +77,16 @@ export async function validatorHandler(args: IValidatorCliArgs & GlobalArgs): Pr
|
|
|
77
77
|
|
|
78
78
|
const onGracefulShutdownCbs: (() => Promise<void> | void)[] = [];
|
|
79
79
|
onGracefulShutdown(async () => {
|
|
80
|
-
|
|
80
|
+
let exitCode = 0;
|
|
81
|
+
try {
|
|
82
|
+
for (const cb of onGracefulShutdownCbs) await cb();
|
|
83
|
+
logger.debug("Validator client closed");
|
|
84
|
+
} catch (e) {
|
|
85
|
+
logger.warn("Error closing validator client", {}, e as Error);
|
|
86
|
+
exitCode = 1;
|
|
87
|
+
}
|
|
88
|
+
// Explicitly exit process due to potential active handles (e.g. EventSource / in-flight HTTP via DVT middleware)
|
|
89
|
+
process.exit(exitCode);
|
|
81
90
|
}, logger.info.bind(logger));
|
|
82
91
|
|
|
83
92
|
// Callback for validator to request forced exit, in case of doppelganger detection
|