@lodestar/builder 1.50.0-dev.11028e782c → 1.50.0-dev.1f129c79a1
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/services/bidLedger.d.ts +0 -1
- package/lib/services/bidLedger.d.ts.map +1 -1
- package/lib/services/bidLedger.js +0 -4
- package/lib/services/bidLedger.js.map +1 -1
- package/package.json +10 -10
- package/src/services/bidLedger.ts +0 -5
- package/lib/services/envelopePublisher.d.ts +0 -44
- package/lib/services/envelopePublisher.d.ts.map +0 -1
- package/lib/services/envelopePublisher.js +0 -96
- package/lib/services/envelopePublisher.js.map +0 -1
- package/src/services/envelopePublisher.ts +0 -154
|
@@ -53,7 +53,6 @@ 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;
|
|
57
56
|
/** Release a winning bid liability only after its payment is known to be reflected in Builder balance. */
|
|
58
57
|
recordPaymentSettled(identity: BidIdentity): BidLedgerRecord | null;
|
|
59
58
|
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":"AACA,OAAO,KAAK,EAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAC,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAE9C,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,IAAI,CAAC;IACX,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,WAAW,CAAC,CAAC;AAE3G,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG;IAC3C,aAAa,EAAE,OAAO,EAAE,CAAC;CAC1B,CAAC;AAcF,oBAAY,kBAAkB;IAC5B,iBAAiB,uCAAuC;IACxD,aAAa,mCAAmC;IAChD,WAAW,iCAAiC;IAC5C,eAAe,qCAAqC;IACpD,wBAAwB,8CAA8C;CACvE;AAED,MAAM,MAAM,kBAAkB,GAC1B;IACE,IAAI,EAAE,kBAAkB,CAAC,iBAAiB,CAAC;IAC3C,SAAS,EAAE,MAAM,CAAC;CACnB,GACD;IACE,IAAI,EAAE,kBAAkB,CAAC,aAAa,CAAC;IACvC,IAAI,EAAE,IAAI,CAAC;IACX,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;CAC1B,GACD;IACE,IAAI,EAAE,kBAAkB,CAAC,WAAW,CAAC;IACrC,IAAI,EAAE,IAAI,CAAC;IACX,eAAe,EAAE,IAAI,CAAC;CACvB,GACD;IACE,IAAI,EAAE,kBAAkB,CAAC,eAAe,CAAC;IACzC,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,oBAAoB,EAAE,OAAO,CAAC;CAC/B,GACD;IACE,IAAI,EAAE,kBAAkB,CAAC,wBAAwB,CAAC;IAClD,YAAY,EAAE,KAAK,CAAC;CACrB,CAAC;AAEN,qBAAa,cAAe,SAAQ,aAAa,CAAC,kBAAkB,CAAC;CAAG;AAKxE,sGAAsG;AACtG,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwD;IACnF,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAuC;IAClF,OAAO,CAAC,eAAe,CAAK;IAE5B,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,GAAG,OAAO,CAEpF;IAED,kBAAkB,CAAC,EACjB,IAAI,EACJ,eAAe,EACf,eAAe,GAChB,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,iBAAiB,GAAG,iBAAiB,CAAC,GAAG,IAAI,CAU3E;IAED,SAAS,CAAC,GAAG,EAAE,YAAY,GAAG,eAAe,CAmB5C;IAED,SAAS,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,EAAE,SAAS,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAQjH;IAED,
|
|
1
|
+
{"version":3,"file":"bidLedger.d.ts","sourceRoot":"","sources":["../../src/services/bidLedger.ts"],"names":[],"mappings":"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"}
|
|
@@ -51,10 +51,6 @@ 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
|
-
}
|
|
58
54
|
/** Release a winning bid liability only after its payment is known to be reflected in Builder balance. */
|
|
59
55
|
recordPaymentSettled(identity) {
|
|
60
56
|
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,
|
|
1
|
+
{"version":3,"file":"bidLedger.js","sourceRoot":"","sources":["../../src/services/bidLedger.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lodestar/builder",
|
|
3
|
-
"version": "1.50.0-dev.
|
|
3
|
+
"version": "1.50.0-dev.1f129c79a1",
|
|
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/lodestar-z": "catalog:",
|
|
50
50
|
"@chainsafe/ssz": "^1.8.0",
|
|
51
|
-
"@lodestar/api": "^1.50.0-dev.
|
|
52
|
-
"@lodestar/config": "^1.50.0-dev.
|
|
53
|
-
"@lodestar/params": "^1.50.0-dev.
|
|
54
|
-
"@lodestar/state-transition": "^1.50.0-dev.
|
|
55
|
-
"@lodestar/types": "^1.50.0-dev.
|
|
56
|
-
"@lodestar/utils": "^1.50.0-dev.
|
|
51
|
+
"@lodestar/api": "^1.50.0-dev.1f129c79a1",
|
|
52
|
+
"@lodestar/config": "^1.50.0-dev.1f129c79a1",
|
|
53
|
+
"@lodestar/params": "^1.50.0-dev.1f129c79a1",
|
|
54
|
+
"@lodestar/state-transition": "^1.50.0-dev.1f129c79a1",
|
|
55
|
+
"@lodestar/types": "^1.50.0-dev.1f129c79a1",
|
|
56
|
+
"@lodestar/utils": "^1.50.0-dev.1f129c79a1"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
|
-
"@lodestar/logger": "^1.50.0-dev.
|
|
60
|
-
"@lodestar/test-utils": "^1.50.0-dev.
|
|
59
|
+
"@lodestar/logger": "^1.50.0-dev.1f129c79a1",
|
|
60
|
+
"@lodestar/test-utils": "^1.50.0-dev.1f129c79a1"
|
|
61
61
|
},
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "56a698e7fdf2c99a7dd95e1602be9c66521fe94b"
|
|
63
63
|
}
|
|
@@ -128,11 +128,6 @@ export class BidLedger {
|
|
|
128
128
|
return toRecord(record);
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
-
hasWon(identity: BidIdentity, blockRoot: RootHex): boolean {
|
|
132
|
-
const record = this.getBid(identity.slot, identity.parentBlockHash, identity.parentBlockRoot);
|
|
133
|
-
return record !== null && record.blockHash === identity.blockHash && record.wonBlockRoots.has(blockRoot);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
131
|
/** Release a winning bid liability only after its payment is known to be reflected in Builder balance. */
|
|
137
132
|
recordPaymentSettled(identity: BidIdentity): BidLedgerRecord | null {
|
|
138
133
|
const record = this.getBid(identity.slot, identity.parentBlockHash, identity.parentBlockRoot);
|
|
@@ -1,44 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,96 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"envelopePublisher.js","sourceRoot":"","sources":["../../src/services/envelopePublisher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
import {type ApiClient, routes} from "@lodestar/api";
|
|
2
|
-
import {type BuilderIndex, type RootHex, type gloas, ssz} from "@lodestar/types";
|
|
3
|
-
import {LodestarError, defer, toRootHex} 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
|
-
|
|
8
|
-
export type EnvelopeSelectionIdentity = BidIdentity & {blockRoot: RootHex};
|
|
9
|
-
|
|
10
|
-
export type EnvelopePublisherModules = {
|
|
11
|
-
api: ApiClient;
|
|
12
|
-
signer: BuilderSigner;
|
|
13
|
-
ledger: BidLedger;
|
|
14
|
-
builderIndex: BuilderIndex;
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
export enum EnvelopePublisherErrorCode {
|
|
18
|
-
BUILDER_INDEX_MISMATCH = "ENVELOPE_PUBLISHER_ERROR_BUILDER_INDEX_MISMATCH",
|
|
19
|
-
SELECTION_NOT_RECORDED = "ENVELOPE_PUBLISHER_ERROR_SELECTION_NOT_RECORDED",
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export type EnvelopePublisherErrorType =
|
|
23
|
-
| {
|
|
24
|
-
code: EnvelopePublisherErrorCode.BUILDER_INDEX_MISMATCH;
|
|
25
|
-
builderIndex: BuilderIndex;
|
|
26
|
-
envelopeBuilderIndex: BuilderIndex;
|
|
27
|
-
}
|
|
28
|
-
| ({code: EnvelopePublisherErrorCode.SELECTION_NOT_RECORDED} & EnvelopeSelectionIdentity);
|
|
29
|
-
|
|
30
|
-
export class EnvelopePublisherError extends LodestarError<EnvelopePublisherErrorType> {}
|
|
31
|
-
|
|
32
|
-
export type EnvelopePublicationResult =
|
|
33
|
-
| {status: "published"; signedEnvelope: gloas.SignedExecutionPayloadEnvelope}
|
|
34
|
-
| {status: "duplicate"};
|
|
35
|
-
|
|
36
|
-
type ActivePublication = {
|
|
37
|
-
controller: AbortController;
|
|
38
|
-
promise: Promise<EnvelopePublicationResult>;
|
|
39
|
-
waiters: number;
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
/** Signs and submits an envelope for a recorded local selection. */
|
|
43
|
-
export class EnvelopePublisher {
|
|
44
|
-
private readonly activePublications = new Map<RootHex, ActivePublication>();
|
|
45
|
-
|
|
46
|
-
constructor(private readonly modules: EnvelopePublisherModules) {}
|
|
47
|
-
|
|
48
|
-
async publish(contents: ExecutionPayloadEnvelopeContents, signal: AbortSignal): Promise<EnvelopePublicationResult> {
|
|
49
|
-
signal.throwIfAborted();
|
|
50
|
-
|
|
51
|
-
const {api, builderIndex, ledger, signer} = this.modules;
|
|
52
|
-
const {envelope} = contents;
|
|
53
|
-
if (envelope.builderIndex !== builderIndex) {
|
|
54
|
-
throw new EnvelopePublisherError(
|
|
55
|
-
{
|
|
56
|
-
code: EnvelopePublisherErrorCode.BUILDER_INDEX_MISMATCH,
|
|
57
|
-
builderIndex,
|
|
58
|
-
envelopeBuilderIndex: envelope.builderIndex,
|
|
59
|
-
},
|
|
60
|
-
`Envelope builder index does not match local builder index builderIndex=${builderIndex} envelopeBuilderIndex=${envelope.builderIndex}`
|
|
61
|
-
);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
const identity: EnvelopeSelectionIdentity = {
|
|
65
|
-
slot: envelope.payload.slotNumber,
|
|
66
|
-
parentBlockHash: toRootHex(envelope.payload.parentHash),
|
|
67
|
-
parentBlockRoot: toRootHex(envelope.parentBeaconBlockRoot),
|
|
68
|
-
blockHash: toRootHex(envelope.payload.blockHash),
|
|
69
|
-
blockRoot: toRootHex(envelope.beaconBlockRoot),
|
|
70
|
-
};
|
|
71
|
-
if (!ledger.hasWon(identity, identity.blockRoot)) {
|
|
72
|
-
throw new EnvelopePublisherError(
|
|
73
|
-
{code: EnvelopePublisherErrorCode.SELECTION_NOT_RECORDED, ...identity},
|
|
74
|
-
`Envelope selection is not recorded slot=${identity.slot} blockRoot=${identity.blockRoot} blockHash=${identity.blockHash}`
|
|
75
|
-
);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
const envelopeRoot = toRootHex(ssz.gloas.ExecutionPayloadEnvelope.hashTreeRoot(envelope));
|
|
79
|
-
ledger.recordReveal(identity.slot, identity.blockRoot, identity.blockHash, envelopeRoot);
|
|
80
|
-
if (ledger.hasPublishedReveal(identity.blockRoot)) {
|
|
81
|
-
return {status: "duplicate"};
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
let publication = this.activePublications.get(identity.blockRoot);
|
|
85
|
-
if (publication === undefined) {
|
|
86
|
-
const controller = new AbortController();
|
|
87
|
-
publication = {
|
|
88
|
-
controller,
|
|
89
|
-
waiters: 0,
|
|
90
|
-
promise: this.publishEnvelope(contents, identity, envelopeRoot, api, ledger, signer, controller.signal).finally(
|
|
91
|
-
() => {
|
|
92
|
-
if (this.activePublications.get(identity.blockRoot)?.controller === controller) {
|
|
93
|
-
this.activePublications.delete(identity.blockRoot);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
),
|
|
97
|
-
};
|
|
98
|
-
this.activePublications.set(identity.blockRoot, publication);
|
|
99
|
-
}
|
|
100
|
-
return this.waitForPublication(identity.blockRoot, publication, signal);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
private async waitForPublication(
|
|
104
|
-
blockRoot: RootHex,
|
|
105
|
-
publication: ActivePublication,
|
|
106
|
-
signal: AbortSignal
|
|
107
|
-
): Promise<EnvelopePublicationResult> {
|
|
108
|
-
const aborted = defer<never>();
|
|
109
|
-
const onAbort = (): void => aborted.reject(signal.reason);
|
|
110
|
-
publication.waiters++;
|
|
111
|
-
signal.addEventListener("abort", onAbort, {once: true});
|
|
112
|
-
if (signal.aborted) onAbort();
|
|
113
|
-
|
|
114
|
-
try {
|
|
115
|
-
return await Promise.race([publication.promise, aborted.promise]);
|
|
116
|
-
} finally {
|
|
117
|
-
signal.removeEventListener("abort", onAbort);
|
|
118
|
-
publication.waiters--;
|
|
119
|
-
if (publication.waiters === 0 && signal.aborted) {
|
|
120
|
-
if (this.activePublications.get(blockRoot) === publication) {
|
|
121
|
-
this.activePublications.delete(blockRoot);
|
|
122
|
-
}
|
|
123
|
-
publication.controller.abort(signal.reason);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
private async publishEnvelope(
|
|
129
|
-
contents: ExecutionPayloadEnvelopeContents,
|
|
130
|
-
identity: EnvelopeSelectionIdentity,
|
|
131
|
-
envelopeRoot: RootHex,
|
|
132
|
-
api: ApiClient,
|
|
133
|
-
ledger: BidLedger,
|
|
134
|
-
signer: BuilderSigner,
|
|
135
|
-
signal: AbortSignal
|
|
136
|
-
): Promise<EnvelopePublicationResult> {
|
|
137
|
-
const signedEnvelope = signer.signExecutionPayloadEnvelope(contents.envelope);
|
|
138
|
-
|
|
139
|
-
const response = await api.beacon.publishExecutionPayloadEnvelope(
|
|
140
|
-
{
|
|
141
|
-
signedEnvelopeOrContents: {
|
|
142
|
-
signedExecutionPayloadEnvelope: signedEnvelope,
|
|
143
|
-
kzgProofs: contents.kzgProofs,
|
|
144
|
-
blobs: contents.blobs,
|
|
145
|
-
},
|
|
146
|
-
broadcastValidation: routes.beacon.BroadcastValidation.gossip,
|
|
147
|
-
},
|
|
148
|
-
{signal}
|
|
149
|
-
);
|
|
150
|
-
response.assertOk();
|
|
151
|
-
ledger.recordRevealPublished(identity.slot, identity.blockRoot, identity.blockHash, envelopeRoot);
|
|
152
|
-
return {status: "published", signedEnvelope};
|
|
153
|
-
}
|
|
154
|
-
}
|