@lodestar/builder 1.48.0 → 1.49.0-dev.04dd7ca9f2

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 CHANGED
@@ -17,7 +17,7 @@ export type BuilderModules = {
17
17
  proposerPreferencesTracker: ProposerPreferencesTracker;
18
18
  clock: IClock;
19
19
  index: BuilderIndex;
20
- store: PayloadStore;
20
+ payloadStore: PayloadStore;
21
21
  };
22
22
  export type BuilderOptions = {
23
23
  logger: Logger;
@@ -42,8 +42,8 @@ export declare class Builder {
42
42
  private readonly index;
43
43
  private readonly logger;
44
44
  private readonly executionFeeRecipient;
45
- private readonly store;
46
- constructor({ opts, builderSigner, blockObserver, builderStatusTracker, proposerPreferencesTracker, clock, index, store, }: BuilderModules);
45
+ private readonly payloadStore;
46
+ constructor({ opts, builderSigner, blockObserver, builderStatusTracker, proposerPreferencesTracker, clock, index, payloadStore, }: BuilderModules);
47
47
  static init(opts: BuilderOptions): Promise<Builder>;
48
48
  private onSlot;
49
49
  close(): Promise<void>;
@@ -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;AAGzD,OAAO,EAAC,OAAO,EAAC,MAAM,cAAc,CAAC;AAErC,OAAO,EAAC,aAAa,EAAC,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAC,aAAa,EAAE,OAAO,EAAC,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAC,oBAAoB,EAAC,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAC,YAAY,EAAC,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAC,0BAA0B,EAAC,MAAM,0CAA0C,CAAC;AAEpF,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,cAAc,CAAC;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,EAAE,aAAa,CAAC;IAC7B,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,0BAA0B,EAAE,0BAA0B,CAAC;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,CAAC;IACpB,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;IACxC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,qBAAa,OAAO;IAClB,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,0BAA0B,EAAE,0BAA0B,CAAC;IAChE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,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;IACzD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IAErC,YAAY,EACV,IAAI,EACJ,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,0BAA0B,EAC1B,KAAK,EACL,KAAK,EACL,KAAK,GACN,EAAE,cAAc,EAuBhB;IAED,OAAa,IAAI,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CA4CxD;YAEa,MAAM;IAKd,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;CACF"}
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;AAGzD,OAAO,EAAC,OAAO,EAAC,MAAM,cAAc,CAAC;AAErC,OAAO,EAAC,aAAa,EAAC,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAC,aAAa,EAAE,OAAO,EAAC,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAC,oBAAoB,EAAC,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAC,YAAY,EAAC,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAC,0BAA0B,EAAC,MAAM,0CAA0C,CAAC;AAEpF,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,cAAc,CAAC;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,EAAE,aAAa,CAAC;IAC7B,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,0BAA0B,EAAE,0BAA0B,CAAC;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,CAAC;IACpB,YAAY,EAAE,YAAY,CAAC;CAC5B,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;IACxC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,qBAAa,OAAO;IAClB,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,0BAA0B,EAAE,0BAA0B,CAAC;IAChE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,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;IACzD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAE5C,YAAY,EACV,IAAI,EACJ,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,0BAA0B,EAC1B,KAAK,EACL,KAAK,EACL,YAAY,GACb,EAAE,cAAc,EAuBhB;IAED,OAAa,IAAI,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CA4CxD;YAEa,MAAM;IAKd,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;CACF"}
package/lib/builder.js CHANGED
@@ -22,8 +22,8 @@ export class Builder {
22
22
  index;
23
23
  logger;
24
24
  executionFeeRecipient;
25
- store;
26
- constructor({ opts, builderSigner, blockObserver, builderStatusTracker, proposerPreferencesTracker, clock, index, store, }) {
25
+ payloadStore;
26
+ constructor({ opts, builderSigner, blockObserver, builderStatusTracker, proposerPreferencesTracker, clock, index, payloadStore, }) {
27
27
  this.builderSigner = builderSigner;
28
28
  this.blockObserver = blockObserver;
29
29
  this.builderStatusTracker = builderStatusTracker;
@@ -32,7 +32,7 @@ export class Builder {
32
32
  this.controller = opts.abortController;
33
33
  this.logger = opts.logger;
34
34
  this.index = index;
35
- this.store = store;
35
+ this.payloadStore = payloadStore;
36
36
  this.executionFeeRecipient = opts.executionFeeRecipient;
37
37
  this.clock.runEverySlot(async (slot) => this.onSlot(slot));
38
38
  this.clock.runEveryEpoch((epoch) => this.builderStatusTracker.poll(epoch));
@@ -62,7 +62,7 @@ export class Builder {
62
62
  const builderStatusTracker = new BuilderStatusTracker(api, logger, index, opts.metrics);
63
63
  const blockObserver = new BlockObserver(config, logger, api);
64
64
  const proposerPreferencesTracker = new ProposerPreferencesTracker(api, logger);
65
- const store = new PayloadStore();
65
+ const payloadStore = new PayloadStore();
66
66
  return new Builder({
67
67
  opts,
68
68
  builderSigner,
@@ -71,11 +71,11 @@ export class Builder {
71
71
  proposerPreferencesTracker,
72
72
  clock,
73
73
  index,
74
- store,
74
+ payloadStore,
75
75
  });
76
76
  }
77
77
  async onSlot(slot) {
78
- this.store.prune(slot);
78
+ this.payloadStore.prune(slot);
79
79
  this.proposerPreferencesTracker.prune(slot);
80
80
  }
81
81
  async close() {
@@ -1 +1 @@
1
- {"version":3,"file":"builder.js","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ import type { ForkPostGloas } from "@lodestar/params";
2
+ import type { BlobsBundle, ColumnIndex, ExecutionPayload, ExecutionRequests, RootHex, SSEPayloadAttributes } from "@lodestar/types";
3
+ import { LodestarError } from "@lodestar/utils";
4
+ export type PayloadId = string;
5
+ export type ForkchoiceState = {
6
+ headBlockHash: RootHex;
7
+ safeBlockHash: RootHex;
8
+ finalizedBlockHash: RootHex;
9
+ };
10
+ export type PayloadAttributes = SSEPayloadAttributes<ForkPostGloas>["payloadAttributes"];
11
+ export type BuildRequest = {
12
+ fork: ForkPostGloas;
13
+ forkchoiceState: ForkchoiceState;
14
+ payloadAttributes: PayloadAttributes;
15
+ };
16
+ export type BuildHandle = {
17
+ sourceId: string;
18
+ fork: ForkPostGloas;
19
+ payloadId: PayloadId;
20
+ };
21
+ export type BuiltPayload = {
22
+ sourceId: string;
23
+ fork: ForkPostGloas;
24
+ executionPayload: ExecutionPayload<ForkPostGloas>;
25
+ executionRequests: ExecutionRequests<ForkPostGloas>;
26
+ blobsBundle: BlobsBundle<ForkPostGloas>;
27
+ executionPayloadValue: bigint;
28
+ };
29
+ export type EnginePayloadResult = {
30
+ executionPayload: ExecutionPayload<ForkPostGloas>;
31
+ executionPayloadValue: bigint;
32
+ blobsBundle?: BlobsBundle<ForkPostGloas>;
33
+ executionRequests?: ExecutionRequests<ForkPostGloas>;
34
+ };
35
+ /** Narrow Engine boundary whose transport owns serialization, retries, and request execution. */
36
+ export interface PayloadSourceEngine {
37
+ notifyForkchoiceUpdate(fork: ForkPostGloas, headBlockHash: RootHex, safeBlockHash: RootHex, finalizedBlockHash: RootHex, payloadAttributes: PayloadAttributes, custodyColumns: ColumnIndex[] | null, signal: AbortSignal): Promise<PayloadId | null>;
38
+ getPayload(fork: ForkPostGloas, payloadId: PayloadId, signal: AbortSignal): Promise<EnginePayloadResult>;
39
+ }
40
+ /** Source that prepares and retrieves complete execution payloads without owning build scheduling policy. */
41
+ export interface PayloadSource {
42
+ readonly id: string;
43
+ prepare(request: BuildRequest, signal: AbortSignal): Promise<BuildHandle>;
44
+ getPayload(handle: BuildHandle, signal: AbortSignal): Promise<BuiltPayload>;
45
+ }
46
+ export declare enum PayloadSourceErrorCode {
47
+ NO_PAYLOAD_ID = "PAYLOAD_SOURCE_ERROR_NO_PAYLOAD_ID",
48
+ MISSING_BLOBS_BUNDLE = "PAYLOAD_SOURCE_ERROR_MISSING_BLOBS_BUNDLE",
49
+ MISSING_EXECUTION_REQUESTS = "PAYLOAD_SOURCE_ERROR_MISSING_EXECUTION_REQUESTS"
50
+ }
51
+ export type PayloadSourceErrorType = {
52
+ code: PayloadSourceErrorCode.NO_PAYLOAD_ID;
53
+ sourceId: string;
54
+ } | {
55
+ code: PayloadSourceErrorCode.MISSING_BLOBS_BUNDLE | PayloadSourceErrorCode.MISSING_EXECUTION_REQUESTS;
56
+ sourceId: string;
57
+ payloadId: PayloadId;
58
+ };
59
+ export declare class PayloadSourceError extends LodestarError<PayloadSourceErrorType> {
60
+ }
61
+ /** Payload source backed by an injected Engine boundary. Engine ownership and lifecycle remain caller policy. */
62
+ export declare class EnginePayloadSource implements PayloadSource {
63
+ readonly id: string;
64
+ private readonly engine;
65
+ constructor(id: string, engine: PayloadSourceEngine);
66
+ prepare(request: BuildRequest, signal: AbortSignal): Promise<BuildHandle>;
67
+ getPayload(handle: BuildHandle, signal: AbortSignal): Promise<BuiltPayload>;
68
+ }
69
+ //# sourceMappingURL=payloadSource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payloadSource.d.ts","sourceRoot":"","sources":["../../src/services/payloadSource.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import { LodestarError } from "@lodestar/utils";
2
+ export var PayloadSourceErrorCode;
3
+ (function (PayloadSourceErrorCode) {
4
+ PayloadSourceErrorCode["NO_PAYLOAD_ID"] = "PAYLOAD_SOURCE_ERROR_NO_PAYLOAD_ID";
5
+ PayloadSourceErrorCode["MISSING_BLOBS_BUNDLE"] = "PAYLOAD_SOURCE_ERROR_MISSING_BLOBS_BUNDLE";
6
+ PayloadSourceErrorCode["MISSING_EXECUTION_REQUESTS"] = "PAYLOAD_SOURCE_ERROR_MISSING_EXECUTION_REQUESTS";
7
+ })(PayloadSourceErrorCode || (PayloadSourceErrorCode = {}));
8
+ export class PayloadSourceError extends LodestarError {
9
+ }
10
+ /** Payload source backed by an injected Engine boundary. Engine ownership and lifecycle remain caller policy. */
11
+ export class EnginePayloadSource {
12
+ id;
13
+ engine;
14
+ constructor(id, engine) {
15
+ this.id = id;
16
+ this.engine = engine;
17
+ }
18
+ async prepare(request, signal) {
19
+ const { headBlockHash, safeBlockHash, finalizedBlockHash } = request.forkchoiceState;
20
+ const payloadId = await this.engine.notifyForkchoiceUpdate(request.fork, headBlockHash, safeBlockHash, finalizedBlockHash, request.payloadAttributes,
21
+ // The builder does not custody or sample data columns, so it never provides a custody set.
22
+ // A null custody set leaves the execution client's blobpool sampling set untouched, which is
23
+ // also what the spec's own build call does (`prepare_execution_payload` passes `custody_columns=None`).
24
+ null, signal);
25
+ if (payloadId === null) {
26
+ throw new PayloadSourceError({ code: PayloadSourceErrorCode.NO_PAYLOAD_ID, sourceId: this.id }, `Execution client did not return a payload ID sourceId=${this.id}`);
27
+ }
28
+ return { sourceId: this.id, fork: request.fork, payloadId };
29
+ }
30
+ async getPayload(handle, signal) {
31
+ const { executionPayload, executionPayloadValue, blobsBundle, executionRequests } = await this.engine.getPayload(handle.fork, handle.payloadId, signal);
32
+ if (blobsBundle === undefined) {
33
+ throw new PayloadSourceError({
34
+ code: PayloadSourceErrorCode.MISSING_BLOBS_BUNDLE,
35
+ sourceId: this.id,
36
+ payloadId: handle.payloadId,
37
+ }, `Execution client did not return a blobs bundle sourceId=${this.id} payloadId=${handle.payloadId}`);
38
+ }
39
+ if (executionRequests === undefined) {
40
+ throw new PayloadSourceError({
41
+ code: PayloadSourceErrorCode.MISSING_EXECUTION_REQUESTS,
42
+ sourceId: this.id,
43
+ payloadId: handle.payloadId,
44
+ }, `Execution client did not return execution requests sourceId=${this.id} payloadId=${handle.payloadId}`);
45
+ }
46
+ return {
47
+ sourceId: this.id,
48
+ fork: handle.fork,
49
+ executionPayload,
50
+ executionRequests,
51
+ blobsBundle,
52
+ executionPayloadValue,
53
+ };
54
+ }
55
+ }
56
+ //# sourceMappingURL=payloadSource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payloadSource.js","sourceRoot":"","sources":["../../src/services/payloadSource.ts"],"names":[],"mappings":"AASA,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AA6D9C,MAAM,CAAN,IAAY,sBAIX;AAJD,WAAY,sBAAsB;IAChC,8EAAoD,CAAA;IACpD,4FAAkE,CAAA;IAClE,wGAA8E,CAAA;AAChF,CAAC,EAJW,sBAAsB,KAAtB,sBAAsB,QAIjC;AAUD,MAAM,OAAO,kBAAmB,SAAQ,aAAqC;CAAG;AAEhF,iHAAiH;AACjH,MAAM,OAAO,mBAAmB;IAEnB,EAAE;IACM,MAAM;IAFzB,YACW,EAAU,EACF,MAA2B;kBADnC,EAAE;sBACM,MAAM;IACtB,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,OAAqB,EAAE,MAAmB;QACtD,MAAM,EAAC,aAAa,EAAE,aAAa,EAAE,kBAAkB,EAAC,GAAG,OAAO,CAAC,eAAe,CAAC;QACnF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,sBAAsB,CACxD,OAAO,CAAC,IAAI,EACZ,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,OAAO,CAAC,iBAAiB;QACzB,2FAA2F;QAC3F,6FAA6F;QAC7F,wGAAwG;QACxG,IAAI,EACJ,MAAM,CACP,CAAC;QAEF,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,MAAM,IAAI,kBAAkB,CAC1B,EAAC,IAAI,EAAE,sBAAsB,CAAC,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAC,EAC/D,yDAAyD,IAAI,CAAC,EAAE,EAAE,CACnE,CAAC;QACJ,CAAC;QAED,OAAO,EAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,EAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAmB,EAAE,MAAmB;QACvD,MAAM,EAAC,gBAAgB,EAAE,qBAAqB,EAAE,WAAW,EAAE,iBAAiB,EAAC,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAC5G,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,SAAS,EAChB,MAAM,CACP,CAAC;QAEF,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,IAAI,kBAAkB,CAC1B;gBACE,IAAI,EAAE,sBAAsB,CAAC,oBAAoB;gBACjD,QAAQ,EAAE,IAAI,CAAC,EAAE;gBACjB,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B,EACD,2DAA2D,IAAI,CAAC,EAAE,cAAc,MAAM,CAAC,SAAS,EAAE,CACnG,CAAC;QACJ,CAAC;QAED,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;YACpC,MAAM,IAAI,kBAAkB,CAC1B;gBACE,IAAI,EAAE,sBAAsB,CAAC,0BAA0B;gBACvD,QAAQ,EAAE,IAAI,CAAC,EAAE;gBACjB,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B,EACD,+DAA+D,IAAI,CAAC,EAAE,cAAc,MAAM,CAAC,SAAS,EAAE,CACvG,CAAC;QACJ,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,EAAE;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,gBAAgB;YAChB,iBAAiB;YACjB,WAAW;YACX,qBAAqB;SACtB,CAAC;IACJ,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lodestar/builder",
3
- "version": "1.48.0",
3
+ "version": "1.49.0-dev.04dd7ca9f2",
4
4
  "description": "A Typescript implementation of the builder client",
5
5
  "author": "ChainSafe Systems",
6
6
  "license": "Apache-2.0",
@@ -47,17 +47,17 @@
47
47
  ],
48
48
  "dependencies": {
49
49
  "@chainsafe/lodestar-z": "catalog:",
50
- "@chainsafe/ssz": "^1.7.0",
51
- "@lodestar/api": "^1.48.0",
52
- "@lodestar/config": "^1.48.0",
53
- "@lodestar/params": "^1.48.0",
54
- "@lodestar/state-transition": "^1.48.0",
55
- "@lodestar/types": "^1.48.0",
56
- "@lodestar/utils": "^1.48.0"
50
+ "@chainsafe/ssz": "^1.8.0",
51
+ "@lodestar/api": "^1.49.0-dev.04dd7ca9f2",
52
+ "@lodestar/config": "^1.49.0-dev.04dd7ca9f2",
53
+ "@lodestar/params": "^1.49.0-dev.04dd7ca9f2",
54
+ "@lodestar/state-transition": "^1.49.0-dev.04dd7ca9f2",
55
+ "@lodestar/types": "^1.49.0-dev.04dd7ca9f2",
56
+ "@lodestar/utils": "^1.49.0-dev.04dd7ca9f2"
57
57
  },
58
58
  "devDependencies": {
59
- "@lodestar/logger": "^1.48.0",
60
- "@lodestar/test-utils": "^1.48.0"
59
+ "@lodestar/logger": "^1.49.0-dev.04dd7ca9f2",
60
+ "@lodestar/test-utils": "^1.49.0-dev.04dd7ca9f2"
61
61
  },
62
- "gitHead": "c7dc2b0b3b715635fb9b616bf178137ad64f7bba"
62
+ "gitHead": "35c4c766f920e72ff449f32aabd0bf92b76e180e"
63
63
  }
package/src/builder.ts CHANGED
@@ -21,7 +21,7 @@ export type BuilderModules = {
21
21
  proposerPreferencesTracker: ProposerPreferencesTracker;
22
22
  clock: IClock;
23
23
  index: BuilderIndex;
24
- store: PayloadStore;
24
+ payloadStore: PayloadStore;
25
25
  };
26
26
 
27
27
  export type BuilderOptions = {
@@ -48,7 +48,7 @@ export class Builder {
48
48
  private readonly index: BuilderIndex;
49
49
  private readonly logger: Logger;
50
50
  private readonly executionFeeRecipient: ExecutionAddress;
51
- private readonly store: PayloadStore;
51
+ private readonly payloadStore: PayloadStore;
52
52
 
53
53
  constructor({
54
54
  opts,
@@ -58,7 +58,7 @@ export class Builder {
58
58
  proposerPreferencesTracker,
59
59
  clock,
60
60
  index,
61
- store,
61
+ payloadStore,
62
62
  }: BuilderModules) {
63
63
  this.builderSigner = builderSigner;
64
64
  this.blockObserver = blockObserver;
@@ -68,7 +68,7 @@ export class Builder {
68
68
  this.controller = opts.abortController;
69
69
  this.logger = opts.logger;
70
70
  this.index = index;
71
- this.store = store;
71
+ this.payloadStore = payloadStore;
72
72
 
73
73
  this.executionFeeRecipient = opts.executionFeeRecipient;
74
74
 
@@ -116,7 +116,7 @@ export class Builder {
116
116
  const blockObserver = new BlockObserver(config, logger, api);
117
117
  const proposerPreferencesTracker = new ProposerPreferencesTracker(api, logger);
118
118
 
119
- const store = new PayloadStore();
119
+ const payloadStore = new PayloadStore();
120
120
 
121
121
  return new Builder({
122
122
  opts,
@@ -126,12 +126,12 @@ export class Builder {
126
126
  proposerPreferencesTracker,
127
127
  clock,
128
128
  index,
129
- store,
129
+ payloadStore,
130
130
  });
131
131
  }
132
132
 
133
133
  private async onSlot(slot: number): Promise<void> {
134
- this.store.prune(slot);
134
+ this.payloadStore.prune(slot);
135
135
  this.proposerPreferencesTracker.prune(slot);
136
136
  }
137
137
 
@@ -0,0 +1,157 @@
1
+ import type {ForkPostGloas} from "@lodestar/params";
2
+ import type {
3
+ BlobsBundle,
4
+ ColumnIndex,
5
+ ExecutionPayload,
6
+ ExecutionRequests,
7
+ RootHex,
8
+ SSEPayloadAttributes,
9
+ } from "@lodestar/types";
10
+ import {LodestarError} from "@lodestar/utils";
11
+
12
+ export type PayloadId = string;
13
+
14
+ export type ForkchoiceState = {
15
+ headBlockHash: RootHex;
16
+ safeBlockHash: RootHex;
17
+ finalizedBlockHash: RootHex;
18
+ };
19
+
20
+ export type PayloadAttributes = SSEPayloadAttributes<ForkPostGloas>["payloadAttributes"];
21
+
22
+ export type BuildRequest = {
23
+ fork: ForkPostGloas;
24
+ forkchoiceState: ForkchoiceState;
25
+ payloadAttributes: PayloadAttributes;
26
+ };
27
+
28
+ export type BuildHandle = {
29
+ sourceId: string;
30
+ fork: ForkPostGloas;
31
+ payloadId: PayloadId;
32
+ };
33
+
34
+ export type BuiltPayload = {
35
+ sourceId: string;
36
+ fork: ForkPostGloas;
37
+ executionPayload: ExecutionPayload<ForkPostGloas>;
38
+ executionRequests: ExecutionRequests<ForkPostGloas>;
39
+ blobsBundle: BlobsBundle<ForkPostGloas>;
40
+ executionPayloadValue: bigint;
41
+ };
42
+
43
+ export type EnginePayloadResult = {
44
+ executionPayload: ExecutionPayload<ForkPostGloas>;
45
+ executionPayloadValue: bigint;
46
+ blobsBundle?: BlobsBundle<ForkPostGloas>;
47
+ executionRequests?: ExecutionRequests<ForkPostGloas>;
48
+ };
49
+
50
+ /** Narrow Engine boundary whose transport owns serialization, retries, and request execution. */
51
+ export interface PayloadSourceEngine {
52
+ notifyForkchoiceUpdate(
53
+ fork: ForkPostGloas,
54
+ headBlockHash: RootHex,
55
+ safeBlockHash: RootHex,
56
+ finalizedBlockHash: RootHex,
57
+ payloadAttributes: PayloadAttributes,
58
+ custodyColumns: ColumnIndex[] | null,
59
+ signal: AbortSignal
60
+ ): Promise<PayloadId | null>;
61
+ getPayload(fork: ForkPostGloas, payloadId: PayloadId, signal: AbortSignal): Promise<EnginePayloadResult>;
62
+ }
63
+
64
+ /** Source that prepares and retrieves complete execution payloads without owning build scheduling policy. */
65
+ export interface PayloadSource {
66
+ readonly id: string;
67
+ prepare(request: BuildRequest, signal: AbortSignal): Promise<BuildHandle>;
68
+ getPayload(handle: BuildHandle, signal: AbortSignal): Promise<BuiltPayload>;
69
+ }
70
+
71
+ export enum PayloadSourceErrorCode {
72
+ NO_PAYLOAD_ID = "PAYLOAD_SOURCE_ERROR_NO_PAYLOAD_ID",
73
+ MISSING_BLOBS_BUNDLE = "PAYLOAD_SOURCE_ERROR_MISSING_BLOBS_BUNDLE",
74
+ MISSING_EXECUTION_REQUESTS = "PAYLOAD_SOURCE_ERROR_MISSING_EXECUTION_REQUESTS",
75
+ }
76
+
77
+ export type PayloadSourceErrorType =
78
+ | {code: PayloadSourceErrorCode.NO_PAYLOAD_ID; sourceId: string}
79
+ | {
80
+ code: PayloadSourceErrorCode.MISSING_BLOBS_BUNDLE | PayloadSourceErrorCode.MISSING_EXECUTION_REQUESTS;
81
+ sourceId: string;
82
+ payloadId: PayloadId;
83
+ };
84
+
85
+ export class PayloadSourceError extends LodestarError<PayloadSourceErrorType> {}
86
+
87
+ /** Payload source backed by an injected Engine boundary. Engine ownership and lifecycle remain caller policy. */
88
+ export class EnginePayloadSource implements PayloadSource {
89
+ constructor(
90
+ readonly id: string,
91
+ private readonly engine: PayloadSourceEngine
92
+ ) {}
93
+
94
+ async prepare(request: BuildRequest, signal: AbortSignal): Promise<BuildHandle> {
95
+ const {headBlockHash, safeBlockHash, finalizedBlockHash} = request.forkchoiceState;
96
+ const payloadId = await this.engine.notifyForkchoiceUpdate(
97
+ request.fork,
98
+ headBlockHash,
99
+ safeBlockHash,
100
+ finalizedBlockHash,
101
+ request.payloadAttributes,
102
+ // The builder does not custody or sample data columns, so it never provides a custody set.
103
+ // A null custody set leaves the execution client's blobpool sampling set untouched, which is
104
+ // also what the spec's own build call does (`prepare_execution_payload` passes `custody_columns=None`).
105
+ null,
106
+ signal
107
+ );
108
+
109
+ if (payloadId === null) {
110
+ throw new PayloadSourceError(
111
+ {code: PayloadSourceErrorCode.NO_PAYLOAD_ID, sourceId: this.id},
112
+ `Execution client did not return a payload ID sourceId=${this.id}`
113
+ );
114
+ }
115
+
116
+ return {sourceId: this.id, fork: request.fork, payloadId};
117
+ }
118
+
119
+ async getPayload(handle: BuildHandle, signal: AbortSignal): Promise<BuiltPayload> {
120
+ const {executionPayload, executionPayloadValue, blobsBundle, executionRequests} = await this.engine.getPayload(
121
+ handle.fork,
122
+ handle.payloadId,
123
+ signal
124
+ );
125
+
126
+ if (blobsBundle === undefined) {
127
+ throw new PayloadSourceError(
128
+ {
129
+ code: PayloadSourceErrorCode.MISSING_BLOBS_BUNDLE,
130
+ sourceId: this.id,
131
+ payloadId: handle.payloadId,
132
+ },
133
+ `Execution client did not return a blobs bundle sourceId=${this.id} payloadId=${handle.payloadId}`
134
+ );
135
+ }
136
+
137
+ if (executionRequests === undefined) {
138
+ throw new PayloadSourceError(
139
+ {
140
+ code: PayloadSourceErrorCode.MISSING_EXECUTION_REQUESTS,
141
+ sourceId: this.id,
142
+ payloadId: handle.payloadId,
143
+ },
144
+ `Execution client did not return execution requests sourceId=${this.id} payloadId=${handle.payloadId}`
145
+ );
146
+ }
147
+
148
+ return {
149
+ sourceId: this.id,
150
+ fork: handle.fork,
151
+ executionPayload,
152
+ executionRequests,
153
+ blobsBundle,
154
+ executionPayloadValue,
155
+ };
156
+ }
157
+ }