@lodestar/builder 1.47.0-dev.92bd4efe9b → 1.47.0-dev.9d19aee2e7
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/builder.d.ts.map +1 -1
- package/lib/builder.js +2 -2
- package/lib/builder.js.map +1 -1
- package/lib/genesis.d.ts.map +1 -1
- package/lib/genesis.js +3 -2
- package/lib/genesis.js.map +1 -1
- package/lib/identity.d.ts +2 -1
- package/lib/identity.d.ts.map +1 -1
- package/lib/identity.js +9 -7
- package/lib/identity.js.map +1 -1
- package/lib/readiness.d.ts.map +1 -1
- package/lib/readiness.js +5 -2
- package/lib/readiness.js.map +1 -1
- package/lib/services/builderStatusTracker.d.ts +2 -2
- package/lib/services/builderStatusTracker.d.ts.map +1 -1
- package/lib/services/builderStatusTracker.js +7 -3
- package/lib/services/builderStatusTracker.js.map +1 -1
- package/package.json +10 -10
- package/src/builder.ts +9 -3
- package/src/genesis.ts +3 -2
- package/src/identity.ts +12 -7
- package/src/readiness.ts +5 -2
- package/src/services/builderStatusTracker.ts +8 -4
package/lib/builder.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,eAAe,CAAC;AACxC,OAAO,EAAC,eAAe,EAAwC,MAAM,kBAAkB,CAAC;AACxF,OAAO,EAAQ,YAAY,EAAE,MAAM,EAAC,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAC,YAAY,EAAE,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAC,MAAM,EAAmB,MAAM,iBAAiB,CAAC;AAIzD,OAAO,EAAC,aAAa,EAAE,OAAO,EAAC,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAC,oBAAoB,EAAC,MAAM,oCAAoC,CAAC;AAExE,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,cAAc,CAAC;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,eAAe,CAAC;IACjC,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,qBAAqB,EAAE,gBAAgB,CAAC;CACzC,CAAC;AAEF;;GAEG;AACH,qBAAa,OAAO;IAClB,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAuB;IAC5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAmB;IAEzD,YAAY,EAAC,IAAI,EAAE,aAAa,EAAE,oBAAoB,EAAE,KAAK,EAAE,KAAK,EAAC,EAAE,cAAc,EAiBpF;IAED,OAAa,IAAI,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,eAAe,CAAC;AACxC,OAAO,EAAC,eAAe,EAAwC,MAAM,kBAAkB,CAAC;AACxF,OAAO,EAAQ,YAAY,EAAE,MAAM,EAAC,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAC,YAAY,EAAE,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAC,MAAM,EAAmB,MAAM,iBAAiB,CAAC;AAIzD,OAAO,EAAC,aAAa,EAAE,OAAO,EAAC,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAC,oBAAoB,EAAC,MAAM,oCAAoC,CAAC;AAExE,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,cAAc,CAAC;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,eAAe,CAAC;IACjC,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,qBAAqB,EAAE,gBAAgB,CAAC;CACzC,CAAC;AAEF;;GAEG;AACH,qBAAa,OAAO;IAClB,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAuB;IAC5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAmB;IAEzD,YAAY,EAAC,IAAI,EAAE,aAAa,EAAE,oBAAoB,EAAE,KAAK,EAAE,KAAK,EAAC,EAAE,cAAc,EAiBpF;IAED,OAAa,IAAI,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CA8BxD;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;CACF"}
|
package/lib/builder.js
CHANGED
|
@@ -25,7 +25,7 @@ export class Builder {
|
|
|
25
25
|
this.logger = opts.logger;
|
|
26
26
|
this.index = index;
|
|
27
27
|
this.executionFeeRecipient = opts.executionFeeRecipient;
|
|
28
|
-
this.clock.runEveryEpoch(() => this.builderStatusTracker.poll());
|
|
28
|
+
this.clock.runEveryEpoch((epoch) => this.builderStatusTracker.poll(epoch));
|
|
29
29
|
this.clock.start(this.controller.signal);
|
|
30
30
|
this.logger.info("Builder client initialized", {
|
|
31
31
|
index: this.index,
|
|
@@ -45,8 +45,8 @@ export class Builder {
|
|
|
45
45
|
const builderSigner = new BuilderSigner(config, opts.keypair);
|
|
46
46
|
await waitForNodeReady(api, logger, opts.abortController.signal);
|
|
47
47
|
await logNodeVersion(api, logger);
|
|
48
|
-
const index = await resolveBuilderIdentity(api, logger, builderSigner.getPubkeyHex(), opts.abortController.signal);
|
|
49
48
|
const clock = new Clock(config, logger, { genesisTime: Number(genesis.genesisTime), ...opts.clock });
|
|
49
|
+
const index = await resolveBuilderIdentity(api, logger, builderSigner.getPubkeyHex(), opts.abortController.signal, clock);
|
|
50
50
|
const builderStatusTracker = new BuilderStatusTracker(api, logger, index);
|
|
51
51
|
return new Builder({ opts, builderSigner, builderStatusTracker, clock, index });
|
|
52
52
|
}
|
package/lib/builder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,iBAAiB,EAAE,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AACxF,OAAO,EAAC,KAAK,EAAuB,MAAM,4BAA4B,CAAC;AAEvE,OAAO,EAAS,KAAK,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAC,sBAAsB,EAAC,MAAM,eAAe,CAAC;AACrD,OAAO,EAAC,cAAc,EAAE,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAC,aAAa,EAAU,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAC,oBAAoB,EAAC,MAAM,oCAAoC,CAAC;AAoBxE;;GAEG;AACH,MAAM,OAAO,OAAO;IACT,aAAa,CAAgB;IACrB,oBAAoB,CAAuB;IAC3C,UAAU,CAAkB;IAC5B,KAAK,CAAS;IACd,KAAK,CAAe;IACpB,MAAM,CAAS;IACf,qBAAqB,CAAmB;IAEzD,YAAY,EAAC,IAAI,EAAE,aAAa,EAAE,oBAAoB,EAAE,KAAK,EAAE,KAAK,EAAiB;QACnF,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACjD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC;QAExD,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"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"}
|
package/lib/genesis.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"genesis.d.ts","sourceRoot":"","sources":["../src/genesis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAA2B,MAAM,eAAe,CAAC;AAClE,OAAO,EAAC,OAAO,EAAC,MAAM,wBAAwB,CAAC;AAC/C,OAAO,
|
|
1
|
+
{"version":3,"file":"genesis.d.ts","sourceRoot":"","sources":["../src/genesis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAA2B,MAAM,eAAe,CAAC;AAClE,OAAO,EAAC,OAAO,EAAC,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAe,MAAM,EAAQ,MAAM,iBAAiB,CAAC;AAK5D,wBAAsB,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAc1G"}
|
package/lib/genesis.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { ApiError, HttpStatusCode } from "@lodestar/api";
|
|
2
|
-
import { sleep } from "@lodestar/utils";
|
|
2
|
+
import { ErrorAborted, sleep } from "@lodestar/utils";
|
|
3
3
|
/** The time between polls when waiting for genesis */
|
|
4
4
|
const WAITING_FOR_GENESIS_POLL_MS = 12 * 1000;
|
|
5
5
|
export async function waitForGenesis(api, logger, signal) {
|
|
6
|
-
while (
|
|
6
|
+
while (!signal.aborted) {
|
|
7
7
|
try {
|
|
8
8
|
return (await api.beacon.getGenesis()).value();
|
|
9
9
|
}
|
|
@@ -17,5 +17,6 @@ export async function waitForGenesis(api, logger, signal) {
|
|
|
17
17
|
await sleep(WAITING_FOR_GENESIS_POLL_MS, signal);
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
|
+
throw new ErrorAborted("waitForGenesis");
|
|
20
21
|
}
|
|
21
22
|
//# sourceMappingURL=genesis.js.map
|
package/lib/genesis.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"genesis.js","sourceRoot":"","sources":["../src/genesis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,QAAQ,EAAE,cAAc,EAAC,MAAM,eAAe,CAAC;AAElE,OAAO,
|
|
1
|
+
{"version":3,"file":"genesis.js","sourceRoot":"","sources":["../src/genesis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,QAAQ,EAAE,cAAc,EAAC,MAAM,eAAe,CAAC;AAElE,OAAO,EAAC,YAAY,EAAU,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAE5D,sDAAsD;AACtD,MAAM,2BAA2B,GAAG,EAAE,GAAG,IAAI,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAc,EAAE,MAAc,EAAE,MAAmB;IACtF,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,OAAO,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QACjD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,cAAc,CAAC,SAAS,EAAE,CAAC;gBACnE,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAC,CAAC,CAAC;YAC3D,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAC,OAAO,EAAG,CAAW,CAAC,OAAO,EAAC,CAAC,CAAC;YAC1E,CAAC;YACD,MAAM,KAAK,CAAC,2BAA2B,EAAE,MAAM,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IACD,MAAM,IAAI,YAAY,CAAC,gBAAgB,CAAC,CAAC;AAC3C,CAAC"}
|
package/lib/identity.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { ApiClient, routes } from "@lodestar/api";
|
|
2
|
+
import { IClock } from "@lodestar/state-transition";
|
|
2
3
|
import { BuilderIndex, BuilderStatus } from "@lodestar/types";
|
|
3
4
|
import { Logger } from "@lodestar/utils";
|
|
4
5
|
export declare const WAITING_FOR_BUILDER_POLL_MS: number;
|
|
5
|
-
export declare function resolveBuilderIdentity(api: ApiClient, logger: Logger, id: routes.beacon.BuilderId, signal: AbortSignal): Promise<BuilderIndex>;
|
|
6
|
+
export declare function resolveBuilderIdentity(api: ApiClient, logger: Logger, id: routes.beacon.BuilderId, signal: AbortSignal, clock: IClock): Promise<BuilderIndex>;
|
|
6
7
|
export declare function getBuilderStatus(api: ApiClient, logger: Logger, id: routes.beacon.BuilderId): Promise<{
|
|
7
8
|
status: BuilderStatus;
|
|
8
9
|
balance: number;
|
package/lib/identity.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,MAAM,EAAC,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAC,YAAY,EAAE,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAC5D,OAAO,
|
|
1
|
+
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,MAAM,EAAC,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAC,MAAM,EAAC,MAAM,4BAA4B,CAAC;AAClD,OAAO,EAAC,YAAY,EAAE,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAe,MAAM,EAAe,MAAM,iBAAiB,CAAC;AAEnE,eAAO,MAAM,2BAA2B,QAAY,CAAC;AAErD,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,EAC3B,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,YAAY,CAAC,CAgBvB;AAED,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,GAC1B,OAAO,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,GAAG,IAAI,CAAC,CAe1D"}
|
package/lib/identity.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { PAYLOAD_BUILDER_VERSION } from "@lodestar/params";
|
|
2
|
-
import { sleep, toHex } from "@lodestar/utils";
|
|
2
|
+
import { ErrorAborted, sleep, toHex } from "@lodestar/utils";
|
|
3
3
|
export const WAITING_FOR_BUILDER_POLL_MS = 10 * 1000;
|
|
4
|
-
export async function resolveBuilderIdentity(api, logger, id, signal) {
|
|
5
|
-
const builderEntry = await waitForBuilder(api, logger, id, signal);
|
|
4
|
+
export async function resolveBuilderIdentity(api, logger, id, signal, clock) {
|
|
5
|
+
const builderEntry = await waitForBuilder(api, logger, id, signal, clock);
|
|
6
6
|
if (builderEntry.builder.version !== PAYLOAD_BUILDER_VERSION) {
|
|
7
7
|
throw Error(`Builder version mismatch: got ${builderEntry.builder.version}, expected ${PAYLOAD_BUILDER_VERSION}`);
|
|
8
8
|
}
|
|
@@ -11,6 +11,7 @@ export async function resolveBuilderIdentity(api, logger, id, signal) {
|
|
|
11
11
|
status: builderEntry.status,
|
|
12
12
|
balanceGwei: builderEntry.builder.balance,
|
|
13
13
|
executionAddress: toHex(builderEntry.builder.executionAddress),
|
|
14
|
+
slot: clock.getCurrentSlot(),
|
|
14
15
|
});
|
|
15
16
|
return builderEntry.index;
|
|
16
17
|
}
|
|
@@ -31,8 +32,8 @@ export async function getBuilderStatus(api, logger, id) {
|
|
|
31
32
|
return null;
|
|
32
33
|
}
|
|
33
34
|
}
|
|
34
|
-
async function waitForBuilder(api, logger, id, signal) {
|
|
35
|
-
while (
|
|
35
|
+
async function waitForBuilder(api, logger, id, signal, clock) {
|
|
36
|
+
while (!signal.aborted) {
|
|
36
37
|
const builder = await fetchBuilder(api, id);
|
|
37
38
|
if (builder?.status === "active") {
|
|
38
39
|
return builder;
|
|
@@ -41,13 +42,14 @@ async function waitForBuilder(api, logger, id, signal) {
|
|
|
41
42
|
throw Error(`Builder exited: id=${id}`);
|
|
42
43
|
}
|
|
43
44
|
if (builder?.status === "pending") {
|
|
44
|
-
logger.info("Waiting for builder deposit to be finalized", { id });
|
|
45
|
+
logger.info("Waiting for builder deposit to be finalized", { id, slot: clock.getCurrentSlot() });
|
|
45
46
|
}
|
|
46
47
|
else {
|
|
47
|
-
logger.info("Waiting for builder to be known to the beacon node", { id });
|
|
48
|
+
logger.info("Waiting for builder to be known to the beacon node", { id, slot: clock.getCurrentSlot() });
|
|
48
49
|
}
|
|
49
50
|
await sleep(WAITING_FOR_BUILDER_POLL_MS, signal);
|
|
50
51
|
}
|
|
52
|
+
throw new ErrorAborted("waitForBuilder");
|
|
51
53
|
}
|
|
52
54
|
async function fetchBuilder(api, id) {
|
|
53
55
|
const builderRes = await api.beacon.getStateBuilders({
|
package/lib/identity.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,uBAAuB,EAAC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,uBAAuB,EAAC,MAAM,kBAAkB,CAAC;AAGzD,OAAO,EAAC,YAAY,EAAU,KAAK,EAAE,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAEnE,MAAM,CAAC,MAAM,2BAA2B,GAAG,EAAE,GAAG,IAAI,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,GAAc,EACd,MAAc,EACd,EAA2B,EAC3B,MAAmB,EACnB,KAAa;IAEb,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAE1E,IAAI,YAAY,CAAC,OAAO,CAAC,OAAO,KAAK,uBAAuB,EAAE,CAAC;QAC7D,MAAM,KAAK,CAAC,iCAAiC,YAAY,CAAC,OAAO,CAAC,OAAO,cAAc,uBAAuB,EAAE,CAAC,CAAC;IACpH,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE;QACvC,KAAK,EAAE,YAAY,CAAC,KAAK;QACzB,MAAM,EAAE,YAAY,CAAC,MAAM;QAC3B,WAAW,EAAE,YAAY,CAAC,OAAO,CAAC,OAAO;QACzC,gBAAgB,EAAE,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC;QAC9D,IAAI,EAAE,KAAK,CAAC,cAAc,EAAE;KAC7B,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC,KAAK,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAc,EACd,MAAc,EACd,EAA2B;IAE3B,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACjD,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO;gBACL,MAAM,EAAE,YAAY,CAAC,MAAM;gBAC3B,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,OAAO;aACtC,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE,EAAE,CAAU,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,GAAc,EACd,MAAc,EACd,EAA2B,EAC3B,MAAmB,EACnB,KAAa;IAEb,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5C,IAAI,OAAO,EAAE,MAAM,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,IAAI,OAAO,EAAE,MAAM,KAAK,QAAQ,EAAE,CAAC;YACjC,MAAM,KAAK,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,OAAO,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,6CAA6C,EAAE,EAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,cAAc,EAAE,EAAC,CAAC,CAAC;QACjG,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,oDAAoD,EAAE,EAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,cAAc,EAAE,EAAC,CAAC,CAAC;QACxG,CAAC;QACD,MAAM,KAAK,CAAC,2BAA2B,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;IACD,MAAM,IAAI,YAAY,CAAC,gBAAgB,CAAC,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,GAAc,EACd,EAA2B;IAE3B,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC;QACnD,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,CAAC,EAAE,CAAC;KACjB,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC;IAEpC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE5B,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC3B,IAAI,EAAE,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,CAAC,uBAAuB,OAAO,CAAC,KAAK,aAAa,EAAE,EAAE,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;SAAM,IAAI,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,MAAM,KAAK,CAAC,wBAAwB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/lib/readiness.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readiness.d.ts","sourceRoot":"","sources":["../src/readiness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,eAAe,CAAC;AACxC,OAAO,EAAC,MAAM,EAAQ,MAAM,iBAAiB,CAAC;AAK9C,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAIzG;
|
|
1
|
+
{"version":3,"file":"readiness.d.ts","sourceRoot":"","sources":["../src/readiness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,eAAe,CAAC;AACxC,OAAO,EAAC,MAAM,EAAQ,MAAM,iBAAiB,CAAC;AAK9C,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAIzG;AA6CD,wBAAsB,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAalF"}
|
package/lib/readiness.js
CHANGED
|
@@ -26,14 +26,17 @@ async function isNodeReady(api, logger) {
|
|
|
26
26
|
return false;
|
|
27
27
|
}
|
|
28
28
|
if (syncingStatus.isOptimistic) {
|
|
29
|
-
logger.warn("Beacon node head is optimistic, execution payloads are not yet verified - unable to submit bids"
|
|
29
|
+
logger.warn("Beacon node head is optimistic, execution payloads are not yet verified - unable to submit bids", {
|
|
30
|
+
headSlot: syncingStatus.headSlot,
|
|
31
|
+
syncDistance: syncingStatus.syncDistance,
|
|
32
|
+
});
|
|
30
33
|
return false;
|
|
31
34
|
}
|
|
32
35
|
logger.info("Beacon node is ready", { headSlot: syncingStatus.headSlot });
|
|
33
36
|
return true;
|
|
34
37
|
}
|
|
35
38
|
catch (e) {
|
|
36
|
-
logger.
|
|
39
|
+
logger.error("Cannot reach the beacon node", {}, e);
|
|
37
40
|
return false;
|
|
38
41
|
}
|
|
39
42
|
}
|
package/lib/readiness.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readiness.js","sourceRoot":"","sources":["../src/readiness.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAE9C,6DAA6D;AAC7D,MAAM,8BAA8B,GAAG,CAAC,GAAG,IAAI,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAc,EAAE,MAAc,EAAE,MAAmB;IACxF,OAAO,CAAC,CAAC,MAAM,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;QACzC,MAAM,KAAK,CAAC,8BAA8B,EAAE,MAAM,CAAC,CAAC;IACtD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAc,EAAE,MAAc;IACvD,IAAI,CAAC;QACH,MAAM,gBAAgB,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE3D,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE;gBACzC,MAAM,EAAE,gBAAgB,CAAC,MAAM;gBAC/B,OAAO,EAAE,gBAAgB,CAAC,KAAK,EAAE,EAAE,OAAO;aAC3C,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,aAAa,GAAG,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAE/C,IAAI,aAAa,CAAC,SAAS,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;YACvD,MAAM,CAAC,IAAI,CACT,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,kDAAkD,CAAC,CAAC,CAAC,8BAA8B,EAC7G;gBACE,QAAQ,EAAE,aAAa,CAAC,QAAQ;gBAChC,YAAY,EAAE,aAAa,CAAC,YAAY;gBACxC,SAAS,EAAE,aAAa,CAAC,SAAS;aACnC,CACF,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,aAAa,CAAC,YAAY,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,iGAAiG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"readiness.js","sourceRoot":"","sources":["../src/readiness.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAE9C,6DAA6D;AAC7D,MAAM,8BAA8B,GAAG,CAAC,GAAG,IAAI,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAc,EAAE,MAAc,EAAE,MAAmB;IACxF,OAAO,CAAC,CAAC,MAAM,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;QACzC,MAAM,KAAK,CAAC,8BAA8B,EAAE,MAAM,CAAC,CAAC;IACtD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAc,EAAE,MAAc;IACvD,IAAI,CAAC;QACH,MAAM,gBAAgB,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE3D,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE;gBACzC,MAAM,EAAE,gBAAgB,CAAC,MAAM;gBAC/B,OAAO,EAAE,gBAAgB,CAAC,KAAK,EAAE,EAAE,OAAO;aAC3C,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,aAAa,GAAG,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAE/C,IAAI,aAAa,CAAC,SAAS,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;YACvD,MAAM,CAAC,IAAI,CACT,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,kDAAkD,CAAC,CAAC,CAAC,8BAA8B,EAC7G;gBACE,QAAQ,EAAE,aAAa,CAAC,QAAQ;gBAChC,YAAY,EAAE,aAAa,CAAC,YAAY;gBACxC,SAAS,EAAE,aAAa,CAAC,SAAS;aACnC,CACF,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,aAAa,CAAC,YAAY,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,iGAAiG,EAAE;gBAC7G,QAAQ,EAAE,aAAa,CAAC,QAAQ;gBAChC,YAAY,EAAE,aAAa,CAAC,YAAY;aACzC,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAC,CAAC,CAAC;QAExE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,EAAE,EAAE,CAAU,CAAC,CAAC;QAC7D,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAc,EAAE,MAAc;IACjE,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACrD,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE;YACpC,UAAU,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE;YACtE,eAAe,EAAE,OAAO,CAAC,eAAe;gBACtC,CAAC,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,IAAI,IAAI,OAAO,CAAC,eAAe,CAAC,OAAO,EAAE;gBACtE,CAAC,CAAC,SAAS;SACd,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE,EAAE,CAAU,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ApiClient } from "@lodestar/api";
|
|
2
|
-
import { BuilderIndex, BuilderStatus } from "@lodestar/types";
|
|
2
|
+
import { BuilderIndex, BuilderStatus, Epoch } from "@lodestar/types";
|
|
3
3
|
import { Logger } from "@lodestar/utils";
|
|
4
4
|
/**
|
|
5
5
|
* Service for tracking builder status.
|
|
@@ -12,7 +12,7 @@ export declare class BuilderStatusTracker {
|
|
|
12
12
|
private status?;
|
|
13
13
|
private balanceGwei?;
|
|
14
14
|
constructor(api: ApiClient, logger: Logger, index: BuilderIndex);
|
|
15
|
-
poll(): Promise<void>;
|
|
15
|
+
poll(currentEpoch: Epoch): Promise<void>;
|
|
16
16
|
getStatus(): {
|
|
17
17
|
status: BuilderStatus | undefined;
|
|
18
18
|
balance: number | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builderStatusTracker.d.ts","sourceRoot":"","sources":["../../src/services/builderStatusTracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,eAAe,CAAC;AACxC,OAAO,EAAC,YAAY,EAAE,aAAa,EAAC,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"builderStatusTracker.d.ts","sourceRoot":"","sources":["../../src/services/builderStatusTracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,eAAe,CAAC;AACxC,OAAO,EAAC,YAAY,EAAE,aAAa,EAAE,KAAK,EAAC,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAGvC;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IAErC,OAAO,CAAC,MAAM,CAAC,CAAgB;IAC/B,OAAO,CAAC,WAAW,CAAC,CAAS;IAE7B,YAAY,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAI9D;IAEK,IAAI,CAAC,YAAY,EAAE,KAAK,iBAc7B;IAED,SAAS,IAAI;QAAC,MAAM,EAAE,aAAa,GAAG,SAAS,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;KAAC,CAK5E;CACF"}
|
|
@@ -14,15 +14,19 @@ export class BuilderStatusTracker {
|
|
|
14
14
|
this.logger = logger;
|
|
15
15
|
this.index = index;
|
|
16
16
|
}
|
|
17
|
-
async poll() {
|
|
17
|
+
async poll(currentEpoch) {
|
|
18
18
|
const builderStatus = await getBuilderStatus(this.api, this.logger, this.index);
|
|
19
19
|
if (builderStatus !== null) {
|
|
20
20
|
if (this.status !== undefined && this.status !== builderStatus.status) {
|
|
21
|
-
this.logger.info("Builder status changed", { from: this.status, to: builderStatus.status });
|
|
21
|
+
this.logger.info("Builder status changed", { from: this.status, to: builderStatus.status, epoch: currentEpoch });
|
|
22
22
|
}
|
|
23
23
|
this.status = builderStatus.status;
|
|
24
24
|
this.balanceGwei = builderStatus.balance;
|
|
25
|
-
this.logger.info("Builder status", {
|
|
25
|
+
this.logger.info("Builder status", {
|
|
26
|
+
status: builderStatus.status,
|
|
27
|
+
balance: builderStatus.balance,
|
|
28
|
+
epoch: currentEpoch,
|
|
29
|
+
});
|
|
26
30
|
}
|
|
27
31
|
}
|
|
28
32
|
getStatus() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builderStatusTracker.js","sourceRoot":"","sources":["../../src/services/builderStatusTracker.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AAEhD;;;GAGG;AACH,MAAM,OAAO,oBAAoB;IACd,GAAG,CAAY;IACf,MAAM,CAAS;IACf,KAAK,CAAe;IAE7B,MAAM,CAAiB;IACvB,WAAW,CAAU;IAE7B,YAAY,GAAc,EAAE,MAAc,EAAE,KAAmB;QAC7D,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,IAAI;
|
|
1
|
+
{"version":3,"file":"builderStatusTracker.js","sourceRoot":"","sources":["../../src/services/builderStatusTracker.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AAEhD;;;GAGG;AACH,MAAM,OAAO,oBAAoB;IACd,GAAG,CAAY;IACf,MAAM,CAAS;IACf,KAAK,CAAe;IAE7B,MAAM,CAAiB;IACvB,WAAW,CAAU;IAE7B,YAAY,GAAc,EAAE,MAAc,EAAE,KAAmB;QAC7D,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,YAAmB;QAC5B,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAChF,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;YAC3B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM,EAAE,CAAC;gBACtE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,EAAC,CAAC,CAAC;YACjH,CAAC;YACD,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;YACnC,IAAI,CAAC,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC;YACzC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBACjC,MAAM,EAAE,aAAa,CAAC,MAAM;gBAC5B,OAAO,EAAE,aAAa,CAAC,OAAO;gBAC9B,KAAK,EAAE,YAAY;aACpB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,SAAS;QACP,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,WAAW;SAC1B,CAAC;IACJ,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lodestar/builder",
|
|
3
|
-
"version": "1.47.0-dev.
|
|
3
|
+
"version": "1.47.0-dev.9d19aee2e7",
|
|
4
4
|
"description": "A Typescript implementation of the builder client",
|
|
5
5
|
"author": "ChainSafe Systems",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -48,16 +48,16 @@
|
|
|
48
48
|
"dependencies": {
|
|
49
49
|
"@chainsafe/blst": "^2.2.0",
|
|
50
50
|
"@chainsafe/ssz": "^1.6.2",
|
|
51
|
-
"@lodestar/api": "^1.47.0-dev.
|
|
52
|
-
"@lodestar/config": "^1.47.0-dev.
|
|
53
|
-
"@lodestar/params": "^1.47.0-dev.
|
|
54
|
-
"@lodestar/state-transition": "^1.47.0-dev.
|
|
55
|
-
"@lodestar/types": "^1.47.0-dev.
|
|
56
|
-
"@lodestar/utils": "^1.47.0-dev.
|
|
51
|
+
"@lodestar/api": "^1.47.0-dev.9d19aee2e7",
|
|
52
|
+
"@lodestar/config": "^1.47.0-dev.9d19aee2e7",
|
|
53
|
+
"@lodestar/params": "^1.47.0-dev.9d19aee2e7",
|
|
54
|
+
"@lodestar/state-transition": "^1.47.0-dev.9d19aee2e7",
|
|
55
|
+
"@lodestar/types": "^1.47.0-dev.9d19aee2e7",
|
|
56
|
+
"@lodestar/utils": "^1.47.0-dev.9d19aee2e7"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
|
-
"@lodestar/logger": "^1.47.0-dev.
|
|
60
|
-
"@lodestar/test-utils": "^1.47.0-dev.
|
|
59
|
+
"@lodestar/logger": "^1.47.0-dev.9d19aee2e7",
|
|
60
|
+
"@lodestar/test-utils": "^1.47.0-dev.9d19aee2e7"
|
|
61
61
|
},
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "7bcb13bb1874a0d514f22c13a8629eabc69eabe8"
|
|
63
63
|
}
|
package/src/builder.ts
CHANGED
|
@@ -49,7 +49,7 @@ export class Builder {
|
|
|
49
49
|
|
|
50
50
|
this.executionFeeRecipient = opts.executionFeeRecipient;
|
|
51
51
|
|
|
52
|
-
this.clock.runEveryEpoch(() => this.builderStatusTracker.poll());
|
|
52
|
+
this.clock.runEveryEpoch((epoch) => this.builderStatusTracker.poll(epoch));
|
|
53
53
|
this.clock.start(this.controller.signal);
|
|
54
54
|
|
|
55
55
|
this.logger.info("Builder client initialized", {
|
|
@@ -75,10 +75,16 @@ export class Builder {
|
|
|
75
75
|
await waitForNodeReady(api, logger, opts.abortController.signal);
|
|
76
76
|
await logNodeVersion(api, logger);
|
|
77
77
|
|
|
78
|
-
const index = await resolveBuilderIdentity(api, logger, builderSigner.getPubkeyHex(), opts.abortController.signal);
|
|
79
|
-
|
|
80
78
|
const clock = new Clock(config, logger, {genesisTime: Number(genesis.genesisTime), ...opts.clock});
|
|
81
79
|
|
|
80
|
+
const index = await resolveBuilderIdentity(
|
|
81
|
+
api,
|
|
82
|
+
logger,
|
|
83
|
+
builderSigner.getPubkeyHex(),
|
|
84
|
+
opts.abortController.signal,
|
|
85
|
+
clock
|
|
86
|
+
);
|
|
87
|
+
|
|
82
88
|
const builderStatusTracker = new BuilderStatusTracker(api, logger, index);
|
|
83
89
|
|
|
84
90
|
return new Builder({opts, builderSigner, builderStatusTracker, clock, index});
|
package/src/genesis.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {ApiClient, ApiError, HttpStatusCode} from "@lodestar/api";
|
|
2
2
|
import {Genesis} from "@lodestar/types/phase0";
|
|
3
|
-
import {Logger, sleep} from "@lodestar/utils";
|
|
3
|
+
import {ErrorAborted, Logger, sleep} from "@lodestar/utils";
|
|
4
4
|
|
|
5
5
|
/** The time between polls when waiting for genesis */
|
|
6
6
|
const WAITING_FOR_GENESIS_POLL_MS = 12 * 1000;
|
|
7
7
|
|
|
8
8
|
export async function waitForGenesis(api: ApiClient, logger: Logger, signal: AbortSignal): Promise<Genesis> {
|
|
9
|
-
while (
|
|
9
|
+
while (!signal.aborted) {
|
|
10
10
|
try {
|
|
11
11
|
return (await api.beacon.getGenesis()).value();
|
|
12
12
|
} catch (e) {
|
|
@@ -18,4 +18,5 @@ export async function waitForGenesis(api: ApiClient, logger: Logger, signal: Abo
|
|
|
18
18
|
await sleep(WAITING_FOR_GENESIS_POLL_MS, signal);
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
+
throw new ErrorAborted("waitForGenesis");
|
|
21
22
|
}
|
package/src/identity.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import {ApiClient, routes} from "@lodestar/api";
|
|
2
2
|
import {PAYLOAD_BUILDER_VERSION} from "@lodestar/params";
|
|
3
|
+
import {IClock} from "@lodestar/state-transition";
|
|
3
4
|
import {BuilderIndex, BuilderStatus} from "@lodestar/types";
|
|
4
|
-
import {Logger, sleep, toHex} from "@lodestar/utils";
|
|
5
|
+
import {ErrorAborted, Logger, sleep, toHex} from "@lodestar/utils";
|
|
5
6
|
|
|
6
7
|
export const WAITING_FOR_BUILDER_POLL_MS = 10 * 1000;
|
|
7
8
|
|
|
@@ -9,9 +10,10 @@ export async function resolveBuilderIdentity(
|
|
|
9
10
|
api: ApiClient,
|
|
10
11
|
logger: Logger,
|
|
11
12
|
id: routes.beacon.BuilderId,
|
|
12
|
-
signal: AbortSignal
|
|
13
|
+
signal: AbortSignal,
|
|
14
|
+
clock: IClock
|
|
13
15
|
): Promise<BuilderIndex> {
|
|
14
|
-
const builderEntry = await waitForBuilder(api, logger, id, signal);
|
|
16
|
+
const builderEntry = await waitForBuilder(api, logger, id, signal, clock);
|
|
15
17
|
|
|
16
18
|
if (builderEntry.builder.version !== PAYLOAD_BUILDER_VERSION) {
|
|
17
19
|
throw Error(`Builder version mismatch: got ${builderEntry.builder.version}, expected ${PAYLOAD_BUILDER_VERSION}`);
|
|
@@ -22,6 +24,7 @@ export async function resolveBuilderIdentity(
|
|
|
22
24
|
status: builderEntry.status,
|
|
23
25
|
balanceGwei: builderEntry.builder.balance,
|
|
24
26
|
executionAddress: toHex(builderEntry.builder.executionAddress),
|
|
27
|
+
slot: clock.getCurrentSlot(),
|
|
25
28
|
});
|
|
26
29
|
|
|
27
30
|
return builderEntry.index;
|
|
@@ -52,9 +55,10 @@ async function waitForBuilder(
|
|
|
52
55
|
api: ApiClient,
|
|
53
56
|
logger: Logger,
|
|
54
57
|
id: routes.beacon.BuilderId,
|
|
55
|
-
signal: AbortSignal
|
|
58
|
+
signal: AbortSignal,
|
|
59
|
+
clock: IClock
|
|
56
60
|
): Promise<routes.beacon.BuilderResponse> {
|
|
57
|
-
while (
|
|
61
|
+
while (!signal.aborted) {
|
|
58
62
|
const builder = await fetchBuilder(api, id);
|
|
59
63
|
if (builder?.status === "active") {
|
|
60
64
|
return builder;
|
|
@@ -63,12 +67,13 @@ async function waitForBuilder(
|
|
|
63
67
|
throw Error(`Builder exited: id=${id}`);
|
|
64
68
|
}
|
|
65
69
|
if (builder?.status === "pending") {
|
|
66
|
-
logger.info("Waiting for builder deposit to be finalized", {id});
|
|
70
|
+
logger.info("Waiting for builder deposit to be finalized", {id, slot: clock.getCurrentSlot()});
|
|
67
71
|
} else {
|
|
68
|
-
logger.info("Waiting for builder to be known to the beacon node", {id});
|
|
72
|
+
logger.info("Waiting for builder to be known to the beacon node", {id, slot: clock.getCurrentSlot()});
|
|
69
73
|
}
|
|
70
74
|
await sleep(WAITING_FOR_BUILDER_POLL_MS, signal);
|
|
71
75
|
}
|
|
76
|
+
throw new ErrorAborted("waitForBuilder");
|
|
72
77
|
}
|
|
73
78
|
|
|
74
79
|
async function fetchBuilder(
|
package/src/readiness.ts
CHANGED
|
@@ -37,7 +37,10 @@ async function isNodeReady(api: ApiClient, logger: Logger): Promise<boolean> {
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
if (syncingStatus.isOptimistic) {
|
|
40
|
-
logger.warn("Beacon node head is optimistic, execution payloads are not yet verified - unable to submit bids"
|
|
40
|
+
logger.warn("Beacon node head is optimistic, execution payloads are not yet verified - unable to submit bids", {
|
|
41
|
+
headSlot: syncingStatus.headSlot,
|
|
42
|
+
syncDistance: syncingStatus.syncDistance,
|
|
43
|
+
});
|
|
41
44
|
return false;
|
|
42
45
|
}
|
|
43
46
|
|
|
@@ -45,7 +48,7 @@ async function isNodeReady(api: ApiClient, logger: Logger): Promise<boolean> {
|
|
|
45
48
|
|
|
46
49
|
return true;
|
|
47
50
|
} catch (e) {
|
|
48
|
-
logger.
|
|
51
|
+
logger.error("Cannot reach the beacon node", {}, e as Error);
|
|
49
52
|
return false;
|
|
50
53
|
}
|
|
51
54
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {ApiClient} from "@lodestar/api";
|
|
2
|
-
import {BuilderIndex, BuilderStatus} from "@lodestar/types";
|
|
2
|
+
import {BuilderIndex, BuilderStatus, Epoch} from "@lodestar/types";
|
|
3
3
|
import {Logger} from "@lodestar/utils";
|
|
4
4
|
import {getBuilderStatus} from "../identity.js";
|
|
5
5
|
|
|
@@ -21,15 +21,19 @@ export class BuilderStatusTracker {
|
|
|
21
21
|
this.index = index;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
async poll() {
|
|
24
|
+
async poll(currentEpoch: Epoch) {
|
|
25
25
|
const builderStatus = await getBuilderStatus(this.api, this.logger, this.index);
|
|
26
26
|
if (builderStatus !== null) {
|
|
27
27
|
if (this.status !== undefined && this.status !== builderStatus.status) {
|
|
28
|
-
this.logger.info("Builder status changed", {from: this.status, to: builderStatus.status});
|
|
28
|
+
this.logger.info("Builder status changed", {from: this.status, to: builderStatus.status, epoch: currentEpoch});
|
|
29
29
|
}
|
|
30
30
|
this.status = builderStatus.status;
|
|
31
31
|
this.balanceGwei = builderStatus.balance;
|
|
32
|
-
this.logger.info("Builder status", {
|
|
32
|
+
this.logger.info("Builder status", {
|
|
33
|
+
status: builderStatus.status,
|
|
34
|
+
balance: builderStatus.balance,
|
|
35
|
+
epoch: currentEpoch,
|
|
36
|
+
});
|
|
33
37
|
}
|
|
34
38
|
}
|
|
35
39
|
|