@lodestar/builder 1.50.0-dev.814fe8c461 → 1.50.0-dev.82f05c43ff
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/README.md +1 -1
- package/lib/builder.d.ts +5 -0
- package/lib/builder.d.ts.map +1 -1
- package/lib/builder.js +23 -0
- package/lib/builder.js.map +1 -1
- package/lib/services/bidLedger.d.ts +1 -0
- package/lib/services/bidLedger.d.ts.map +1 -1
- package/lib/services/bidLedger.js +4 -0
- package/lib/services/bidLedger.js.map +1 -1
- package/lib/services/bidSelector.d.ts +67 -0
- package/lib/services/bidSelector.d.ts.map +1 -0
- package/lib/services/bidSelector.js +59 -0
- package/lib/services/bidSelector.js.map +1 -0
- package/lib/services/envelopePublisher.d.ts +44 -0
- package/lib/services/envelopePublisher.d.ts.map +1 -0
- package/lib/services/envelopePublisher.js +96 -0
- package/lib/services/envelopePublisher.js.map +1 -0
- package/lib/services/executionPayloadEnvelope.d.ts +55 -0
- package/lib/services/executionPayloadEnvelope.d.ts.map +1 -0
- package/lib/services/executionPayloadEnvelope.js +79 -0
- package/lib/services/executionPayloadEnvelope.js.map +1 -0
- package/lib/services/payloadOrchestrator.d.ts +42 -0
- package/lib/services/payloadOrchestrator.d.ts.map +1 -0
- package/lib/services/payloadOrchestrator.js +60 -0
- package/lib/services/payloadOrchestrator.js.map +1 -0
- package/package.json +11 -11
- package/src/builder.ts +28 -0
- package/src/services/bidLedger.ts +5 -0
- package/src/services/bidSelector.ts +138 -0
- package/src/services/envelopePublisher.ts +154 -0
- package/src/services/executionPayloadEnvelope.ts +156 -0
- package/src/services/payloadOrchestrator.ts +107 -0
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Lodestar Builder
|
|
2
2
|
|
|
3
3
|
[](https://discord.gg/aMxzVcr)
|
|
4
|
-
[](https://github.com/ethereum/consensus-specs/releases/tag/v1.7.0-beta.3)
|
|
5
5
|

|
|
6
6
|

|
|
7
7
|
|
package/lib/builder.d.ts
CHANGED
|
@@ -47,6 +47,11 @@ export declare class Builder {
|
|
|
47
47
|
static init(opts: BuilderOptions): Promise<Builder>;
|
|
48
48
|
private onSlot;
|
|
49
49
|
private subscribeToEvents;
|
|
50
|
+
/**
|
|
51
|
+
* Proposer preferences are only broadcast once per proposal slot, fetch the ones the beacon node
|
|
52
|
+
* already knows to cover those missed while not connected, e.g. after a restart
|
|
53
|
+
*/
|
|
54
|
+
private fetchProposerPreferences;
|
|
50
55
|
private onEvent;
|
|
51
56
|
close(): Promise<void>;
|
|
52
57
|
}
|
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,EAAS,MAAM,eAAe,CAAC;AAChD,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,EAAmC,MAAM,iBAAiB,CAAC;AAGzE,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,EAsBhB;IAED,OAAa,IAAI,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CA4CxD;YAEa,MAAM;IAKpB,OAAO,CAAC,iBAAiB;
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAS,MAAM,eAAe,CAAC;AAChD,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,EAAmC,MAAM,iBAAiB,CAAC;AAGzE,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,EAsBhB;IAED,OAAa,IAAI,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CA4CxD;YAEa,MAAM;IAKpB,OAAO,CAAC,iBAAiB;IAsCzB;;;OAGG;YACW,wBAAwB;YAqBxB,OAAO;IAwBf,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;CACF"}
|
package/lib/builder.js
CHANGED
|
@@ -91,6 +91,9 @@ export class Builder {
|
|
|
91
91
|
onEvent: (event) => {
|
|
92
92
|
void this.onEvent(event);
|
|
93
93
|
},
|
|
94
|
+
onOpen: () => {
|
|
95
|
+
void this.fetchProposerPreferences(api);
|
|
96
|
+
},
|
|
94
97
|
onError: (error) => {
|
|
95
98
|
if (!signal.aborted)
|
|
96
99
|
this.logger.error("Failed to receive builder event", { topics: topics.join(",") }, error);
|
|
@@ -110,6 +113,26 @@ export class Builder {
|
|
|
110
113
|
}
|
|
111
114
|
});
|
|
112
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* Proposer preferences are only broadcast once per proposal slot, fetch the ones the beacon node
|
|
118
|
+
* already knows to cover those missed while not connected, e.g. after a restart
|
|
119
|
+
*/
|
|
120
|
+
async fetchProposerPreferences(api) {
|
|
121
|
+
const signal = this.controller.signal;
|
|
122
|
+
try {
|
|
123
|
+
const preferences = (await api.beacon.getProposerPreferences({}, { signal })).value();
|
|
124
|
+
for (const signedProposerPreferences of preferences) {
|
|
125
|
+
// Does not replace preferences already received from the event stream
|
|
126
|
+
this.proposerPreferencesTracker.onProposerPreferences(signedProposerPreferences);
|
|
127
|
+
}
|
|
128
|
+
this.logger.verbose("Fetched proposer preferences", { count: preferences.length });
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
if (!signal.aborted && !isErrorAborted(error)) {
|
|
132
|
+
this.logger.warn("Failed to fetch proposer preferences", {}, error instanceof Error ? error : Error(String(error)));
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
113
136
|
async onEvent(event) {
|
|
114
137
|
const signal = this.controller.signal;
|
|
115
138
|
if (signal.aborted)
|
package/lib/builder.js.map
CHANGED
|
@@ -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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"}
|
|
@@ -53,6 +53,7 @@ export declare class BidLedger {
|
|
|
53
53
|
assertCanRecordBid({ slot, parentBlockHash, parentBlockRoot, }: Pick<SubmittedBid, "slot" | "parentBlockHash" | "parentBlockRoot">): void;
|
|
54
54
|
recordBid(bid: SubmittedBid): BidLedgerRecord;
|
|
55
55
|
recordWin(identity: BidIdentity & Pick<SubmittedBid, "signedBidRoot">, blockRoot: RootHex): BidLedgerRecord | null;
|
|
56
|
+
hasWon(identity: BidIdentity, blockRoot: RootHex): boolean;
|
|
56
57
|
/** Release a winning bid liability only after its payment is known to be reflected in Builder balance. */
|
|
57
58
|
recordPaymentSettled(identity: BidIdentity): BidLedgerRecord | null;
|
|
58
59
|
canReveal(blockRoot: RootHex, blockHash: RootHex, envelopeRoot: RootHex): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bidLedger.d.ts","sourceRoot":"","sources":["../../src/services/bidLedger.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bidLedger.d.ts","sourceRoot":"","sources":["../../src/services/bidLedger.ts"],"names":[],"mappings":"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"}
|
|
@@ -51,6 +51,10 @@ export class BidLedger {
|
|
|
51
51
|
record.wonBlockRoots.add(blockRoot);
|
|
52
52
|
return toRecord(record);
|
|
53
53
|
}
|
|
54
|
+
hasWon(identity, blockRoot) {
|
|
55
|
+
const record = this.getBid(identity.slot, identity.parentBlockHash, identity.parentBlockRoot);
|
|
56
|
+
return record !== null && record.blockHash === identity.blockHash && record.wonBlockRoots.has(blockRoot);
|
|
57
|
+
}
|
|
54
58
|
/** Release a winning bid liability only after its payment is known to be reflected in Builder balance. */
|
|
55
59
|
recordPaymentSettled(identity) {
|
|
56
60
|
const record = this.getBid(identity.slot, identity.parentBlockHash, identity.parentBlockRoot);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bidLedger.js","sourceRoot":"","sources":["../../src/services/bidLedger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AA6B9C,MAAM,CAAN,IAAY,kBAMX;AAND,WAAY,kBAAkB;IAC5B,8EAAwD,CAAA;IACxD,sEAAgD,CAAA;IAChD,kEAA4C,CAAA;IAC5C,0EAAoD,CAAA;IACpD,4FAAsE,CAAA;AACxE,CAAC,EANW,kBAAkB,KAAlB,kBAAkB,QAM7B;AA+BD,MAAM,OAAO,cAAe,SAAQ,aAAiC;CAAG;AAExE,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAClC,MAAM,UAAU,GAAG,uBAAuB,GAAG,eAAe,CAAC;AAE7D,sGAAsG;AACtG,MAAM,OAAO,SAAS;IACH,UAAU,GAAG,IAAI,GAAG,EAA6C,CAAC;IAClE,0BAA0B,GAAG,IAAI,GAAG,EAA4B,CAAC;IAC1E,eAAe,GAAG,CAAC,CAAC;IAE5B,YAAY,CAAC,IAAU,EAAE,eAAwB,EAAE,eAAwB;QACzE,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC,IAAI,KAAK,CAAC;IAC7F,CAAC;IAED,kBAAkB,CAAC,EACjB,IAAI,EACJ,eAAe,EACf,eAAe,GACoD;QACnE,IAAI,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YAChC,MAAM,IAAI,cAAc,CAAC,EAAC,IAAI,EAAE,kBAAkB,CAAC,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAC,CAAC,CAAC;QAChH,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,eAAe,EAAE,eAAe,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,cAAc,CACtB,EAAC,IAAI,EAAE,kBAAkB,CAAC,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE,eAAe,EAAC,EAChF,6BAA6B,IAAI,oBAAoB,eAAe,oBAAoB,eAAe,EAAE,CAC1G,CAAC;QACJ,CAAC;IACH,CAAC;IAED,SAAS,CAAC,GAAiB;QACzB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,cAAc,CACtB,EAAC,IAAI,EAAE,kBAAkB,CAAC,iBAAiB,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAC,EACtE,+BAA+B,GAAG,CAAC,SAAS,EAAE,CAC/C,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;YACxB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,EAAC,GAAG,GAAG,EAAE,aAAa,EAAE,IAAI,GAAG,EAAW,EAAE,cAAc,EAAE,KAAK,EAAC,CAAC;QAClF,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC7B,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,SAAS,CAAC,QAA2D,EAAE,SAAkB;QACvF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;QAC9F,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS,IAAI,MAAM,CAAC,aAAa,KAAK,QAAQ,CAAC,aAAa,EAAE,CAAC;YAClH,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,0GAA0G;IAC1G,oBAAoB,CAAC,QAAqB;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;QAC9F,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS,IAAI,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAClG,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,SAAS,CAAC,SAAkB,EAAE,SAAkB,EAAE,YAAqB;QACrE,MAAM,eAAe,GAAG,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvE,OAAO,CACL,eAAe,KAAK,SAAS;YAC7B,CAAC,eAAe,CAAC,SAAS,KAAK,SAAS,IAAI,eAAe,CAAC,YAAY,KAAK,YAAY,CAAC,CAC3F,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,SAAkB;QAC5B,OAAO,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACxD,CAAC;IAED,kBAAkB,CAAC,SAAkB;QACnC,OAAO,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,SAAS,IAAI,KAAK,CAAC;IAC5E,CAAC;IAED,YAAY,CAAC,IAAU,EAAE,SAAkB,EAAE,SAAkB,EAAE,YAAqB;QACpF,MAAM,eAAe,GAAG,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvE,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,eAAe,CAAC,SAAS,KAAK,SAAS,IAAI,eAAe,CAAC,YAAY,KAAK,YAAY,EAAE,CAAC;gBAC7F,MAAM,IAAI,cAAc,CACtB;oBACE,IAAI,EAAE,kBAAkB,CAAC,eAAe;oBACxC,SAAS;oBACT,SAAS;oBACT,iBAAiB,EAAE,eAAe,CAAC,SAAS;oBAC5C,YAAY;oBACZ,oBAAoB,EAAE,eAAe,CAAC,YAAY;iBACnD,EACD,iDAAiD,SAAS,iBAAiB,eAAe,CAAC,YAAY,EAAE,CAC1G,CAAC;YACJ,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,SAAS,EAAE,EAAC,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;IACpG,CAAC;IAED,qBAAqB,CAAC,IAAU,EAAE,SAAkB,EAAE,SAAkB,EAAE,YAAqB;QAC7F,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QAC5D,MAAM,eAAe,GAAG,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvE,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YAClC,eAAe,CAAC,SAAS,GAAG,IAAI,CAAC;QACnC,CAAC;IACH,CAAC;IAED,qBAAqB,CAAC,YAAmB;QACvC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YACnD,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC1C,IAAI,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;oBAC7D,SAAS;gBACX,CAAC;gBAED,KAAK,IAAI,MAAM,CAAC,SAAS,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;oBACjC,MAAM,IAAI,cAAc,CACtB,EAAC,IAAI,EAAE,kBAAkB,CAAC,wBAAwB,EAAE,YAAY,EAAC,EACjE,mEAAmE,YAAY,EAAE,CAClF,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,cAAc,CAAC,IAAU;QACvB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,WAAiB;QACrB,yEAAyE;QACzE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,WAAW,GAAG,UAAU,CAAC,CAAC;QAChF,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClD,IAAI,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACjC,SAAS;YACX,CAAC;YAED,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;gBACxC,IAAI,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;oBAC7D,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACxB,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC;YACD,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBAC3B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,KAAK,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,IAAI,CAAC,0BAA0B,EAAE,CAAC;YAC3E,IAAI,eAAe,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;gBAChD,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,MAAM,CAAC,IAAU,EAAE,eAAwB,EAAE,eAAwB;QAC3E,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC,IAAI,IAAI,CAAC;IAC5F,CAAC;CACF;AAED,SAAS,QAAQ,CAAC,eAAwB,EAAE,eAAwB;IAClE,OAAO,GAAG,eAAe,IAAI,eAAe,EAAE,CAAC;AACjD,CAAC;AAED,SAAS,QAAQ,CAAC,MAA8B;IAC9C,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;KAChD,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"bidLedger.js","sourceRoot":"","sources":["../../src/services/bidLedger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { ChainForkConfig } from "@lodestar/config";
|
|
2
|
+
import type { ForkPostGloas } from "@lodestar/params";
|
|
3
|
+
import type { BuilderIndex, RootHex, SignedBeaconBlock, Slot } from "@lodestar/types";
|
|
4
|
+
import { LodestarError } from "@lodestar/utils";
|
|
5
|
+
import type { BidLedger, BidLedgerRecord } from "./bidLedger.js";
|
|
6
|
+
export type ObservedPostGloasBlock = {
|
|
7
|
+
blockRoot: RootHex;
|
|
8
|
+
slot: Slot;
|
|
9
|
+
version: ForkPostGloas;
|
|
10
|
+
block: SignedBeaconBlock<ForkPostGloas>;
|
|
11
|
+
};
|
|
12
|
+
export type BidSelectorModules = {
|
|
13
|
+
config: ChainForkConfig;
|
|
14
|
+
ledger: BidLedger;
|
|
15
|
+
builderIndex: BuilderIndex;
|
|
16
|
+
};
|
|
17
|
+
export declare enum BidSelectionIgnoreReason {
|
|
18
|
+
FOREIGN_BUILDER = "foreign_builder"
|
|
19
|
+
}
|
|
20
|
+
export type BidSelectionResult = {
|
|
21
|
+
status: "selected";
|
|
22
|
+
blockRoot: RootHex;
|
|
23
|
+
bid: BidLedgerRecord;
|
|
24
|
+
} | {
|
|
25
|
+
status: "ignored";
|
|
26
|
+
reason: BidSelectionIgnoreReason;
|
|
27
|
+
};
|
|
28
|
+
export declare enum BidSelectorErrorCode {
|
|
29
|
+
BLOCK_ROOT_MISMATCH = "BID_SELECTOR_ERROR_BLOCK_ROOT_MISMATCH",
|
|
30
|
+
BLOCK_SLOT_MISMATCH = "BID_SELECTOR_ERROR_BLOCK_SLOT_MISMATCH",
|
|
31
|
+
BLOCK_FORK_MISMATCH = "BID_SELECTOR_ERROR_BLOCK_FORK_MISMATCH",
|
|
32
|
+
BID_SLOT_MISMATCH = "BID_SELECTOR_ERROR_BID_SLOT_MISMATCH",
|
|
33
|
+
UNKNOWN_BID = "BID_SELECTOR_ERROR_UNKNOWN_BID"
|
|
34
|
+
}
|
|
35
|
+
export type BidSelectorErrorType = {
|
|
36
|
+
code: BidSelectorErrorCode.BLOCK_ROOT_MISMATCH;
|
|
37
|
+
blockRoot: RootHex;
|
|
38
|
+
computedBlockRoot: RootHex;
|
|
39
|
+
} | {
|
|
40
|
+
code: BidSelectorErrorCode.BLOCK_SLOT_MISMATCH;
|
|
41
|
+
slot: Slot;
|
|
42
|
+
blockSlot: Slot;
|
|
43
|
+
} | {
|
|
44
|
+
code: BidSelectorErrorCode.BLOCK_FORK_MISMATCH;
|
|
45
|
+
version: ForkPostGloas;
|
|
46
|
+
blockFork: string;
|
|
47
|
+
} | {
|
|
48
|
+
code: BidSelectorErrorCode.BID_SLOT_MISMATCH;
|
|
49
|
+
slot: Slot;
|
|
50
|
+
bidSlot: Slot;
|
|
51
|
+
} | {
|
|
52
|
+
code: BidSelectorErrorCode.UNKNOWN_BID;
|
|
53
|
+
slot: Slot;
|
|
54
|
+
parentBlockHash: RootHex;
|
|
55
|
+
parentBlockRoot: RootHex;
|
|
56
|
+
blockHash: RootHex;
|
|
57
|
+
signedBidRoot: RootHex;
|
|
58
|
+
};
|
|
59
|
+
export declare class BidSelectorError extends LodestarError<BidSelectorErrorType> {
|
|
60
|
+
}
|
|
61
|
+
/** Matches an imported post-Gloas block to an exact local bid and records the win. */
|
|
62
|
+
export declare class BidSelector {
|
|
63
|
+
private readonly modules;
|
|
64
|
+
constructor(modules: BidSelectorModules);
|
|
65
|
+
match(observed: ObservedPostGloasBlock): BidSelectionResult;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=bidSelector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bidSelector.d.ts","sourceRoot":"","sources":["../../src/services/bidSelector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAC,YAAY,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAC,MAAM,iBAAiB,CAAC;AAEpF,OAAO,EAAC,aAAa,EAAY,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAc,SAAS,EAAE,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAE5E,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,aAAa,CAAC;IACvB,KAAK,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,SAAS,CAAC;IAClB,YAAY,EAAE,YAAY,CAAC;CAC5B,CAAC;AAEF,oBAAY,wBAAwB;IAClC,eAAe,oBAAoB;CACpC;AAED,MAAM,MAAM,kBAAkB,GAC1B;IACE,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,eAAe,CAAC;CACtB,GACD;IACE,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,wBAAwB,CAAC;CAClC,CAAC;AAEN,oBAAY,oBAAoB;IAC9B,mBAAmB,2CAA2C;IAC9D,mBAAmB,2CAA2C;IAC9D,mBAAmB,2CAA2C;IAC9D,iBAAiB,yCAAyC;IAC1D,WAAW,mCAAmC;CAC/C;AAED,MAAM,MAAM,oBAAoB,GAC5B;IACE,IAAI,EAAE,oBAAoB,CAAC,mBAAmB,CAAC;IAC/C,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,OAAO,CAAC;CAC5B,GACD;IACE,IAAI,EAAE,oBAAoB,CAAC,mBAAmB,CAAC;IAC/C,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,IAAI,CAAC;CACjB,GACD;IACE,IAAI,EAAE,oBAAoB,CAAC,mBAAmB,CAAC;IAC/C,OAAO,EAAE,aAAa,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB,GACD;IACE,IAAI,EAAE,oBAAoB,CAAC,iBAAiB,CAAC;IAC7C,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,IAAI,CAAC;CACf,GACD;IACE,IAAI,EAAE,oBAAoB,CAAC,WAAW,CAAC;IACvC,IAAI,EAAE,IAAI,CAAC;IACX,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC;AAEN,qBAAa,gBAAiB,SAAQ,aAAa,CAAC,oBAAoB,CAAC;CAAG;AAE5E,sFAAsF;AACtF,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,OAAO;IAApC,YAA6B,OAAO,EAAE,kBAAkB,EAAI;IAE5D,KAAK,CAAC,QAAQ,EAAE,sBAAsB,GAAG,kBAAkB,CAyD1D;CACF"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { sszTypesFor } from "@lodestar/types";
|
|
2
|
+
import { LodestarError, toRootHex } from "@lodestar/utils";
|
|
3
|
+
export var BidSelectionIgnoreReason;
|
|
4
|
+
(function (BidSelectionIgnoreReason) {
|
|
5
|
+
BidSelectionIgnoreReason["FOREIGN_BUILDER"] = "foreign_builder";
|
|
6
|
+
})(BidSelectionIgnoreReason || (BidSelectionIgnoreReason = {}));
|
|
7
|
+
export var BidSelectorErrorCode;
|
|
8
|
+
(function (BidSelectorErrorCode) {
|
|
9
|
+
BidSelectorErrorCode["BLOCK_ROOT_MISMATCH"] = "BID_SELECTOR_ERROR_BLOCK_ROOT_MISMATCH";
|
|
10
|
+
BidSelectorErrorCode["BLOCK_SLOT_MISMATCH"] = "BID_SELECTOR_ERROR_BLOCK_SLOT_MISMATCH";
|
|
11
|
+
BidSelectorErrorCode["BLOCK_FORK_MISMATCH"] = "BID_SELECTOR_ERROR_BLOCK_FORK_MISMATCH";
|
|
12
|
+
BidSelectorErrorCode["BID_SLOT_MISMATCH"] = "BID_SELECTOR_ERROR_BID_SLOT_MISMATCH";
|
|
13
|
+
BidSelectorErrorCode["UNKNOWN_BID"] = "BID_SELECTOR_ERROR_UNKNOWN_BID";
|
|
14
|
+
})(BidSelectorErrorCode || (BidSelectorErrorCode = {}));
|
|
15
|
+
export class BidSelectorError extends LodestarError {
|
|
16
|
+
}
|
|
17
|
+
/** Matches an imported post-Gloas block to an exact local bid and records the win. */
|
|
18
|
+
export class BidSelector {
|
|
19
|
+
modules;
|
|
20
|
+
constructor(modules) {
|
|
21
|
+
this.modules = modules;
|
|
22
|
+
}
|
|
23
|
+
match(observed) {
|
|
24
|
+
const { block, blockRoot, slot, version } = observed;
|
|
25
|
+
const { builderIndex, config, ledger } = this.modules;
|
|
26
|
+
const blockSlot = block.message.slot;
|
|
27
|
+
if (blockSlot !== slot) {
|
|
28
|
+
throw new BidSelectorError({ code: BidSelectorErrorCode.BLOCK_SLOT_MISMATCH, slot, blockSlot }, `Observed block slot does not match fetched block slot=${slot} blockSlot=${blockSlot}`);
|
|
29
|
+
}
|
|
30
|
+
const blockFork = config.getForkName(slot);
|
|
31
|
+
if (blockFork !== version) {
|
|
32
|
+
throw new BidSelectorError({ code: BidSelectorErrorCode.BLOCK_FORK_MISMATCH, version, blockFork }, `Observed block fork does not match configured fork version=${version} blockFork=${blockFork}`);
|
|
33
|
+
}
|
|
34
|
+
const computedBlockRoot = toRootHex(config.getForkTypes(slot).BeaconBlock.hashTreeRoot(block.message));
|
|
35
|
+
if (computedBlockRoot !== blockRoot) {
|
|
36
|
+
throw new BidSelectorError({ code: BidSelectorErrorCode.BLOCK_ROOT_MISMATCH, blockRoot, computedBlockRoot }, `Observed block root does not match fetched block blockRoot=${blockRoot} computedBlockRoot=${computedBlockRoot}`);
|
|
37
|
+
}
|
|
38
|
+
const bid = block.message.body.signedExecutionPayloadBid.message;
|
|
39
|
+
if (bid.slot !== slot) {
|
|
40
|
+
throw new BidSelectorError({ code: BidSelectorErrorCode.BID_SLOT_MISMATCH, slot, bidSlot: bid.slot }, `Selected bid slot does not match block slot=${slot} bidSlot=${bid.slot}`);
|
|
41
|
+
}
|
|
42
|
+
if (bid.builderIndex !== builderIndex) {
|
|
43
|
+
return { status: "ignored", reason: BidSelectionIgnoreReason.FOREIGN_BUILDER };
|
|
44
|
+
}
|
|
45
|
+
const identity = {
|
|
46
|
+
slot,
|
|
47
|
+
parentBlockHash: toRootHex(bid.parentBlockHash),
|
|
48
|
+
parentBlockRoot: toRootHex(bid.parentBlockRoot),
|
|
49
|
+
blockHash: toRootHex(bid.blockHash),
|
|
50
|
+
};
|
|
51
|
+
const signedBidRoot = toRootHex(sszTypesFor(version, "SignedExecutionPayloadBid").hashTreeRoot(block.message.body.signedExecutionPayloadBid));
|
|
52
|
+
const localBid = ledger.recordWin({ ...identity, signedBidRoot }, blockRoot);
|
|
53
|
+
if (localBid === null) {
|
|
54
|
+
throw new BidSelectorError({ code: BidSelectorErrorCode.UNKNOWN_BID, ...identity, signedBidRoot }, `Selected bid is not in the local ledger slot=${slot} blockHash=${identity.blockHash} signedBidRoot=${signedBidRoot}`);
|
|
55
|
+
}
|
|
56
|
+
return { status: "selected", blockRoot, bid: localBid };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=bidSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bidSelector.js","sourceRoot":"","sources":["../../src/services/bidSelector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type ApiClient } from "@lodestar/api";
|
|
2
|
+
import { type BuilderIndex, type RootHex, type gloas } from "@lodestar/types";
|
|
3
|
+
import { LodestarError } from "@lodestar/utils";
|
|
4
|
+
import type { BidIdentity, BidLedger } from "./bidLedger.js";
|
|
5
|
+
import type { BuilderSigner } from "./builderSigner.js";
|
|
6
|
+
import type { ExecutionPayloadEnvelopeContents } from "./executionPayloadEnvelope.js";
|
|
7
|
+
export type EnvelopeSelectionIdentity = BidIdentity & {
|
|
8
|
+
blockRoot: RootHex;
|
|
9
|
+
};
|
|
10
|
+
export type EnvelopePublisherModules = {
|
|
11
|
+
api: ApiClient;
|
|
12
|
+
signer: BuilderSigner;
|
|
13
|
+
ledger: BidLedger;
|
|
14
|
+
builderIndex: BuilderIndex;
|
|
15
|
+
};
|
|
16
|
+
export declare enum EnvelopePublisherErrorCode {
|
|
17
|
+
BUILDER_INDEX_MISMATCH = "ENVELOPE_PUBLISHER_ERROR_BUILDER_INDEX_MISMATCH",
|
|
18
|
+
SELECTION_NOT_RECORDED = "ENVELOPE_PUBLISHER_ERROR_SELECTION_NOT_RECORDED"
|
|
19
|
+
}
|
|
20
|
+
export type EnvelopePublisherErrorType = {
|
|
21
|
+
code: EnvelopePublisherErrorCode.BUILDER_INDEX_MISMATCH;
|
|
22
|
+
builderIndex: BuilderIndex;
|
|
23
|
+
envelopeBuilderIndex: BuilderIndex;
|
|
24
|
+
} | ({
|
|
25
|
+
code: EnvelopePublisherErrorCode.SELECTION_NOT_RECORDED;
|
|
26
|
+
} & EnvelopeSelectionIdentity);
|
|
27
|
+
export declare class EnvelopePublisherError extends LodestarError<EnvelopePublisherErrorType> {
|
|
28
|
+
}
|
|
29
|
+
export type EnvelopePublicationResult = {
|
|
30
|
+
status: "published";
|
|
31
|
+
signedEnvelope: gloas.SignedExecutionPayloadEnvelope;
|
|
32
|
+
} | {
|
|
33
|
+
status: "duplicate";
|
|
34
|
+
};
|
|
35
|
+
/** Signs and submits an envelope for a recorded local selection. */
|
|
36
|
+
export declare class EnvelopePublisher {
|
|
37
|
+
private readonly modules;
|
|
38
|
+
private readonly activePublications;
|
|
39
|
+
constructor(modules: EnvelopePublisherModules);
|
|
40
|
+
publish(contents: ExecutionPayloadEnvelopeContents, signal: AbortSignal): Promise<EnvelopePublicationResult>;
|
|
41
|
+
private waitForPublication;
|
|
42
|
+
private publishEnvelope;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=envelopePublisher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envelopePublisher.d.ts","sourceRoot":"","sources":["../../src/services/envelopePublisher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,SAAS,EAAS,MAAM,eAAe,CAAC;AACrD,OAAO,EAAC,KAAK,YAAY,EAAE,KAAK,OAAO,EAAE,KAAK,KAAK,EAAM,MAAM,iBAAiB,CAAC;AACjF,OAAO,EAAC,aAAa,EAAmB,MAAM,iBAAiB,CAAC;AAChE,OAAO,KAAK,EAAC,WAAW,EAAE,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAC,gCAAgC,EAAC,MAAM,+BAA+B,CAAC;AAEpF,MAAM,MAAM,yBAAyB,GAAG,WAAW,GAAG;IAAC,SAAS,EAAE,OAAO,CAAA;CAAC,CAAC;AAE3E,MAAM,MAAM,wBAAwB,GAAG;IACrC,GAAG,EAAE,SAAS,CAAC;IACf,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,SAAS,CAAC;IAClB,YAAY,EAAE,YAAY,CAAC;CAC5B,CAAC;AAEF,oBAAY,0BAA0B;IACpC,sBAAsB,oDAAoD;IAC1E,sBAAsB,oDAAoD;CAC3E;AAED,MAAM,MAAM,0BAA0B,GAClC;IACE,IAAI,EAAE,0BAA0B,CAAC,sBAAsB,CAAC;IACxD,YAAY,EAAE,YAAY,CAAC;IAC3B,oBAAoB,EAAE,YAAY,CAAC;CACpC,GACD,CAAC;IAAC,IAAI,EAAE,0BAA0B,CAAC,sBAAsB,CAAA;CAAC,GAAG,yBAAyB,CAAC,CAAC;AAE5F,qBAAa,sBAAuB,SAAQ,aAAa,CAAC,0BAA0B,CAAC;CAAG;AAExF,MAAM,MAAM,yBAAyB,GACjC;IAAC,MAAM,EAAE,WAAW,CAAC;IAAC,cAAc,EAAE,KAAK,CAAC,8BAA8B,CAAA;CAAC,GAC3E;IAAC,MAAM,EAAE,WAAW,CAAA;CAAC,CAAC;AAQ1B,oEAAoE;AACpE,qBAAa,iBAAiB;IAGhB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAyC;IAE5E,YAA6B,OAAO,EAAE,wBAAwB,EAAI;IAE5D,OAAO,CAAC,QAAQ,EAAE,gCAAgC,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAqDjH;YAEa,kBAAkB;YAyBlB,eAAe;CA0B9B"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { routes } from "@lodestar/api";
|
|
2
|
+
import { ssz } from "@lodestar/types";
|
|
3
|
+
import { LodestarError, defer, toRootHex } from "@lodestar/utils";
|
|
4
|
+
export var EnvelopePublisherErrorCode;
|
|
5
|
+
(function (EnvelopePublisherErrorCode) {
|
|
6
|
+
EnvelopePublisherErrorCode["BUILDER_INDEX_MISMATCH"] = "ENVELOPE_PUBLISHER_ERROR_BUILDER_INDEX_MISMATCH";
|
|
7
|
+
EnvelopePublisherErrorCode["SELECTION_NOT_RECORDED"] = "ENVELOPE_PUBLISHER_ERROR_SELECTION_NOT_RECORDED";
|
|
8
|
+
})(EnvelopePublisherErrorCode || (EnvelopePublisherErrorCode = {}));
|
|
9
|
+
export class EnvelopePublisherError extends LodestarError {
|
|
10
|
+
}
|
|
11
|
+
/** Signs and submits an envelope for a recorded local selection. */
|
|
12
|
+
export class EnvelopePublisher {
|
|
13
|
+
modules;
|
|
14
|
+
activePublications = new Map();
|
|
15
|
+
constructor(modules) {
|
|
16
|
+
this.modules = modules;
|
|
17
|
+
}
|
|
18
|
+
async publish(contents, signal) {
|
|
19
|
+
signal.throwIfAborted();
|
|
20
|
+
const { api, builderIndex, ledger, signer } = this.modules;
|
|
21
|
+
const { envelope } = contents;
|
|
22
|
+
if (envelope.builderIndex !== builderIndex) {
|
|
23
|
+
throw new EnvelopePublisherError({
|
|
24
|
+
code: EnvelopePublisherErrorCode.BUILDER_INDEX_MISMATCH,
|
|
25
|
+
builderIndex,
|
|
26
|
+
envelopeBuilderIndex: envelope.builderIndex,
|
|
27
|
+
}, `Envelope builder index does not match local builder index builderIndex=${builderIndex} envelopeBuilderIndex=${envelope.builderIndex}`);
|
|
28
|
+
}
|
|
29
|
+
const identity = {
|
|
30
|
+
slot: envelope.payload.slotNumber,
|
|
31
|
+
parentBlockHash: toRootHex(envelope.payload.parentHash),
|
|
32
|
+
parentBlockRoot: toRootHex(envelope.parentBeaconBlockRoot),
|
|
33
|
+
blockHash: toRootHex(envelope.payload.blockHash),
|
|
34
|
+
blockRoot: toRootHex(envelope.beaconBlockRoot),
|
|
35
|
+
};
|
|
36
|
+
if (!ledger.hasWon(identity, identity.blockRoot)) {
|
|
37
|
+
throw new EnvelopePublisherError({ code: EnvelopePublisherErrorCode.SELECTION_NOT_RECORDED, ...identity }, `Envelope selection is not recorded slot=${identity.slot} blockRoot=${identity.blockRoot} blockHash=${identity.blockHash}`);
|
|
38
|
+
}
|
|
39
|
+
const envelopeRoot = toRootHex(ssz.gloas.ExecutionPayloadEnvelope.hashTreeRoot(envelope));
|
|
40
|
+
ledger.recordReveal(identity.slot, identity.blockRoot, identity.blockHash, envelopeRoot);
|
|
41
|
+
if (ledger.hasPublishedReveal(identity.blockRoot)) {
|
|
42
|
+
return { status: "duplicate" };
|
|
43
|
+
}
|
|
44
|
+
let publication = this.activePublications.get(identity.blockRoot);
|
|
45
|
+
if (publication === undefined) {
|
|
46
|
+
const controller = new AbortController();
|
|
47
|
+
publication = {
|
|
48
|
+
controller,
|
|
49
|
+
waiters: 0,
|
|
50
|
+
promise: this.publishEnvelope(contents, identity, envelopeRoot, api, ledger, signer, controller.signal).finally(() => {
|
|
51
|
+
if (this.activePublications.get(identity.blockRoot)?.controller === controller) {
|
|
52
|
+
this.activePublications.delete(identity.blockRoot);
|
|
53
|
+
}
|
|
54
|
+
}),
|
|
55
|
+
};
|
|
56
|
+
this.activePublications.set(identity.blockRoot, publication);
|
|
57
|
+
}
|
|
58
|
+
return this.waitForPublication(identity.blockRoot, publication, signal);
|
|
59
|
+
}
|
|
60
|
+
async waitForPublication(blockRoot, publication, signal) {
|
|
61
|
+
const aborted = defer();
|
|
62
|
+
const onAbort = () => aborted.reject(signal.reason);
|
|
63
|
+
publication.waiters++;
|
|
64
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
65
|
+
if (signal.aborted)
|
|
66
|
+
onAbort();
|
|
67
|
+
try {
|
|
68
|
+
return await Promise.race([publication.promise, aborted.promise]);
|
|
69
|
+
}
|
|
70
|
+
finally {
|
|
71
|
+
signal.removeEventListener("abort", onAbort);
|
|
72
|
+
publication.waiters--;
|
|
73
|
+
if (publication.waiters === 0 && signal.aborted) {
|
|
74
|
+
if (this.activePublications.get(blockRoot) === publication) {
|
|
75
|
+
this.activePublications.delete(blockRoot);
|
|
76
|
+
}
|
|
77
|
+
publication.controller.abort(signal.reason);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async publishEnvelope(contents, identity, envelopeRoot, api, ledger, signer, signal) {
|
|
82
|
+
const signedEnvelope = signer.signExecutionPayloadEnvelope(contents.envelope);
|
|
83
|
+
const response = await api.beacon.publishExecutionPayloadEnvelope({
|
|
84
|
+
signedEnvelopeOrContents: {
|
|
85
|
+
signedExecutionPayloadEnvelope: signedEnvelope,
|
|
86
|
+
kzgProofs: contents.kzgProofs,
|
|
87
|
+
blobs: contents.blobs,
|
|
88
|
+
},
|
|
89
|
+
broadcastValidation: routes.beacon.BroadcastValidation.gossip,
|
|
90
|
+
}, { signal });
|
|
91
|
+
response.assertOk();
|
|
92
|
+
ledger.recordRevealPublished(identity.slot, identity.blockRoot, identity.blockHash, envelopeRoot);
|
|
93
|
+
return { status: "published", signedEnvelope };
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=envelopePublisher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envelopePublisher.js","sourceRoot":"","sources":["../../src/services/envelopePublisher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { BuilderIndex, RootHex, Slot, deneb, gloas } from "@lodestar/types";
|
|
2
|
+
import { LodestarError } from "@lodestar/utils";
|
|
3
|
+
import type { StoredPayload } from "./payloadStore.js";
|
|
4
|
+
export type ExecutionPayloadEnvelopeInput = {
|
|
5
|
+
blockRoot: RootHex;
|
|
6
|
+
builderIndex: BuilderIndex;
|
|
7
|
+
selectedBid: gloas.ExecutionPayloadBid;
|
|
8
|
+
storedPayload: StoredPayload;
|
|
9
|
+
};
|
|
10
|
+
export type ExecutionPayloadEnvelopeContents = {
|
|
11
|
+
envelope: gloas.ExecutionPayloadEnvelope;
|
|
12
|
+
kzgProofs: deneb.KZGProofs;
|
|
13
|
+
blobs: deneb.Blobs;
|
|
14
|
+
};
|
|
15
|
+
export declare enum ExecutionPayloadEnvelopeErrorCode {
|
|
16
|
+
SLOT_MISMATCH = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_SLOT_MISMATCH",
|
|
17
|
+
PARENT_BLOCK_ROOT_MISMATCH = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_PARENT_BLOCK_ROOT_MISMATCH",
|
|
18
|
+
PARENT_BLOCK_HASH_MISMATCH = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_PARENT_BLOCK_HASH_MISMATCH",
|
|
19
|
+
BLOCK_HASH_MISMATCH = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_BLOCK_HASH_MISMATCH",
|
|
20
|
+
BUILDER_INDEX_MISMATCH = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_BUILDER_INDEX_MISMATCH",
|
|
21
|
+
BLOB_KZG_COMMITMENTS_MISMATCH = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_BLOB_KZG_COMMITMENTS_MISMATCH",
|
|
22
|
+
EXECUTION_REQUESTS_ROOT_MISMATCH = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_EXECUTION_REQUESTS_ROOT_MISMATCH"
|
|
23
|
+
}
|
|
24
|
+
export type ExecutionPayloadEnvelopeErrorType = {
|
|
25
|
+
code: ExecutionPayloadEnvelopeErrorCode.BUILDER_INDEX_MISMATCH;
|
|
26
|
+
builderIndex: BuilderIndex;
|
|
27
|
+
bidBuilderIndex: BuilderIndex;
|
|
28
|
+
} | {
|
|
29
|
+
code: ExecutionPayloadEnvelopeErrorCode.BLOB_KZG_COMMITMENTS_MISMATCH;
|
|
30
|
+
} | {
|
|
31
|
+
code: ExecutionPayloadEnvelopeErrorCode.EXECUTION_REQUESTS_ROOT_MISMATCH;
|
|
32
|
+
bidExecutionRequestsRoot: RootHex;
|
|
33
|
+
payloadExecutionRequestsRoot: RootHex;
|
|
34
|
+
} | {
|
|
35
|
+
code: ExecutionPayloadEnvelopeErrorCode.PARENT_BLOCK_ROOT_MISMATCH;
|
|
36
|
+
bidParentBlockRoot: RootHex;
|
|
37
|
+
storedParentBlockRoot: RootHex;
|
|
38
|
+
} | {
|
|
39
|
+
code: ExecutionPayloadEnvelopeErrorCode.SLOT_MISMATCH;
|
|
40
|
+
bidSlot: Slot;
|
|
41
|
+
payloadSlot: Slot;
|
|
42
|
+
} | {
|
|
43
|
+
code: ExecutionPayloadEnvelopeErrorCode.PARENT_BLOCK_HASH_MISMATCH;
|
|
44
|
+
bidParentBlockHash: RootHex;
|
|
45
|
+
payloadParentBlockHash: RootHex;
|
|
46
|
+
} | {
|
|
47
|
+
code: ExecutionPayloadEnvelopeErrorCode.BLOCK_HASH_MISMATCH;
|
|
48
|
+
bidBlockHash: RootHex;
|
|
49
|
+
payloadBlockHash: RootHex;
|
|
50
|
+
};
|
|
51
|
+
export declare class ExecutionPayloadEnvelopeError extends LodestarError<ExecutionPayloadEnvelopeErrorType> {
|
|
52
|
+
}
|
|
53
|
+
/** The caller must have matched the selected bid to its local ledger record. */
|
|
54
|
+
export declare function createExecutionPayloadEnvelopeContents({ blockRoot, builderIndex, selectedBid, storedPayload, }: ExecutionPayloadEnvelopeInput): ExecutionPayloadEnvelopeContents;
|
|
55
|
+
//# sourceMappingURL=executionPayloadEnvelope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executionPayloadEnvelope.d.ts","sourceRoot":"","sources":["../../src/services/executionPayloadEnvelope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAE/E,OAAO,EAAC,aAAa,EAAsC,MAAM,iBAAiB,CAAC;AACnF,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAErD,MAAM,MAAM,6BAA6B,GAAG;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,EAAE,KAAK,CAAC,mBAAmB,CAAC;IACvC,aAAa,EAAE,aAAa,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,QAAQ,EAAE,KAAK,CAAC,wBAAwB,CAAC;IACzC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;CACpB,CAAC;AAEF,oBAAY,iCAAiC;IAC3C,aAAa,mDAAmD;IAChE,0BAA0B,gEAAgE;IAC1F,0BAA0B,gEAAgE;IAC1F,mBAAmB,yDAAyD;IAC5E,sBAAsB,4DAA4D;IAClF,6BAA6B,mEAAmE;IAChG,gCAAgC,sEAAsE;CACvG;AAED,MAAM,MAAM,iCAAiC,GACzC;IACE,IAAI,EAAE,iCAAiC,CAAC,sBAAsB,CAAC;IAC/D,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,YAAY,CAAC;CAC/B,GACD;IAAC,IAAI,EAAE,iCAAiC,CAAC,6BAA6B,CAAA;CAAC,GACvE;IACE,IAAI,EAAE,iCAAiC,CAAC,gCAAgC,CAAC;IACzE,wBAAwB,EAAE,OAAO,CAAC;IAClC,4BAA4B,EAAE,OAAO,CAAC;CACvC,GACD;IACE,IAAI,EAAE,iCAAiC,CAAC,0BAA0B,CAAC;IACnE,kBAAkB,EAAE,OAAO,CAAC;IAC5B,qBAAqB,EAAE,OAAO,CAAC;CAChC,GACD;IACE,IAAI,EAAE,iCAAiC,CAAC,aAAa,CAAC;IACtD,OAAO,EAAE,IAAI,CAAC;IACd,WAAW,EAAE,IAAI,CAAC;CACnB,GACD;IACE,IAAI,EAAE,iCAAiC,CAAC,0BAA0B,CAAC;IACnE,kBAAkB,EAAE,OAAO,CAAC;IAC5B,sBAAsB,EAAE,OAAO,CAAC;CACjC,GACD;IACE,IAAI,EAAE,iCAAiC,CAAC,mBAAmB,CAAC;IAC5D,YAAY,EAAE,OAAO,CAAC;IACtB,gBAAgB,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEN,qBAAa,6BAA8B,SAAQ,aAAa,CAAC,iCAAiC,CAAC;CAAG;AAEtG,gFAAgF;AAChF,wBAAgB,sCAAsC,CAAC,EACrD,SAAS,EACT,YAAY,EACZ,WAAW,EACX,aAAa,GACd,EAAE,6BAA6B,GAAG,gCAAgC,CAsFlE"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { ssz } from "@lodestar/types";
|
|
2
|
+
import { LodestarError, byteArrayEquals, fromHex, toRootHex } from "@lodestar/utils";
|
|
3
|
+
export var ExecutionPayloadEnvelopeErrorCode;
|
|
4
|
+
(function (ExecutionPayloadEnvelopeErrorCode) {
|
|
5
|
+
ExecutionPayloadEnvelopeErrorCode["SLOT_MISMATCH"] = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_SLOT_MISMATCH";
|
|
6
|
+
ExecutionPayloadEnvelopeErrorCode["PARENT_BLOCK_ROOT_MISMATCH"] = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_PARENT_BLOCK_ROOT_MISMATCH";
|
|
7
|
+
ExecutionPayloadEnvelopeErrorCode["PARENT_BLOCK_HASH_MISMATCH"] = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_PARENT_BLOCK_HASH_MISMATCH";
|
|
8
|
+
ExecutionPayloadEnvelopeErrorCode["BLOCK_HASH_MISMATCH"] = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_BLOCK_HASH_MISMATCH";
|
|
9
|
+
ExecutionPayloadEnvelopeErrorCode["BUILDER_INDEX_MISMATCH"] = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_BUILDER_INDEX_MISMATCH";
|
|
10
|
+
ExecutionPayloadEnvelopeErrorCode["BLOB_KZG_COMMITMENTS_MISMATCH"] = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_BLOB_KZG_COMMITMENTS_MISMATCH";
|
|
11
|
+
ExecutionPayloadEnvelopeErrorCode["EXECUTION_REQUESTS_ROOT_MISMATCH"] = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_EXECUTION_REQUESTS_ROOT_MISMATCH";
|
|
12
|
+
})(ExecutionPayloadEnvelopeErrorCode || (ExecutionPayloadEnvelopeErrorCode = {}));
|
|
13
|
+
export class ExecutionPayloadEnvelopeError extends LodestarError {
|
|
14
|
+
}
|
|
15
|
+
/** The caller must have matched the selected bid to its local ledger record. */
|
|
16
|
+
export function createExecutionPayloadEnvelopeContents({ blockRoot, builderIndex, selectedBid, storedPayload, }) {
|
|
17
|
+
if (builderIndex !== selectedBid.builderIndex) {
|
|
18
|
+
throw new ExecutionPayloadEnvelopeError({
|
|
19
|
+
code: ExecutionPayloadEnvelopeErrorCode.BUILDER_INDEX_MISMATCH,
|
|
20
|
+
builderIndex,
|
|
21
|
+
bidBuilderIndex: selectedBid.builderIndex,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
const bidParentBlockRoot = toRootHex(selectedBid.parentBlockRoot);
|
|
25
|
+
const storedParentBlockRoot = toRootHex(storedPayload.parentBlockRoot);
|
|
26
|
+
if (storedParentBlockRoot !== bidParentBlockRoot) {
|
|
27
|
+
throw new ExecutionPayloadEnvelopeError({
|
|
28
|
+
code: ExecutionPayloadEnvelopeErrorCode.PARENT_BLOCK_ROOT_MISMATCH,
|
|
29
|
+
bidParentBlockRoot,
|
|
30
|
+
storedParentBlockRoot,
|
|
31
|
+
}, `Selected bid beacon parent does not match retained payload bidParentBlockRoot=${bidParentBlockRoot} storedParentBlockRoot=${storedParentBlockRoot}`);
|
|
32
|
+
}
|
|
33
|
+
const { payload } = storedPayload;
|
|
34
|
+
const payloadSlot = payload.executionPayload.slotNumber;
|
|
35
|
+
if (payloadSlot !== selectedBid.slot) {
|
|
36
|
+
throw new ExecutionPayloadEnvelopeError({ code: ExecutionPayloadEnvelopeErrorCode.SLOT_MISMATCH, bidSlot: selectedBid.slot, payloadSlot }, `Selected bid slot does not match payload slot bidSlot=${selectedBid.slot} payloadSlot=${payloadSlot}`);
|
|
37
|
+
}
|
|
38
|
+
const payloadParentBlockHash = toRootHex(payload.executionPayload.parentHash);
|
|
39
|
+
const bidParentBlockHash = toRootHex(selectedBid.parentBlockHash);
|
|
40
|
+
if (payloadParentBlockHash !== bidParentBlockHash) {
|
|
41
|
+
throw new ExecutionPayloadEnvelopeError({
|
|
42
|
+
code: ExecutionPayloadEnvelopeErrorCode.PARENT_BLOCK_HASH_MISMATCH,
|
|
43
|
+
bidParentBlockHash,
|
|
44
|
+
payloadParentBlockHash,
|
|
45
|
+
}, `Selected bid parent does not match payload parent bidParentBlockHash=${bidParentBlockHash} payloadParentBlockHash=${payloadParentBlockHash}`);
|
|
46
|
+
}
|
|
47
|
+
const payloadBlockHash = toRootHex(payload.executionPayload.blockHash);
|
|
48
|
+
const bidBlockHash = toRootHex(selectedBid.blockHash);
|
|
49
|
+
if (payloadBlockHash !== bidBlockHash) {
|
|
50
|
+
throw new ExecutionPayloadEnvelopeError({
|
|
51
|
+
code: ExecutionPayloadEnvelopeErrorCode.BLOCK_HASH_MISMATCH,
|
|
52
|
+
bidBlockHash,
|
|
53
|
+
payloadBlockHash,
|
|
54
|
+
}, `Selected bid block hash does not match payload bidBlockHash=${bidBlockHash} payloadBlockHash=${payloadBlockHash}`);
|
|
55
|
+
}
|
|
56
|
+
if (!ssz.gloas.ExecutionPayloadBid.fields.blobKzgCommitments.equals(selectedBid.blobKzgCommitments, payload.blobsBundle.commitments)) {
|
|
57
|
+
throw new ExecutionPayloadEnvelopeError({ code: ExecutionPayloadEnvelopeErrorCode.BLOB_KZG_COMMITMENTS_MISMATCH });
|
|
58
|
+
}
|
|
59
|
+
const executionRequestsRoot = ssz.gloas.ExecutionRequests.hashTreeRoot(payload.executionRequests);
|
|
60
|
+
if (!byteArrayEquals(executionRequestsRoot, selectedBid.executionRequestsRoot)) {
|
|
61
|
+
throw new ExecutionPayloadEnvelopeError({
|
|
62
|
+
code: ExecutionPayloadEnvelopeErrorCode.EXECUTION_REQUESTS_ROOT_MISMATCH,
|
|
63
|
+
bidExecutionRequestsRoot: toRootHex(selectedBid.executionRequestsRoot),
|
|
64
|
+
payloadExecutionRequestsRoot: toRootHex(executionRequestsRoot),
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
envelope: {
|
|
69
|
+
payload: payload.executionPayload,
|
|
70
|
+
executionRequests: payload.executionRequests,
|
|
71
|
+
builderIndex,
|
|
72
|
+
beaconBlockRoot: fromHex(blockRoot),
|
|
73
|
+
parentBeaconBlockRoot: selectedBid.parentBlockRoot,
|
|
74
|
+
},
|
|
75
|
+
kzgProofs: payload.blobsBundle.proofs,
|
|
76
|
+
blobs: payload.blobsBundle.blobs,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=executionPayloadEnvelope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executionPayloadEnvelope.js","sourceRoot":"","sources":["../../src/services/executionPayloadEnvelope.ts"],"names":[],"mappings":"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"}
|