@lodestar/beacon-node 1.43.0 → 1.44.0-dev.055b83cb3d
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/api/impl/beacon/blocks/index.d.ts.map +1 -1
- package/lib/api/impl/beacon/blocks/index.js +30 -0
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/beacon/pool/index.d.ts.map +1 -1
- package/lib/api/impl/beacon/pool/index.js +46 -5
- package/lib/api/impl/beacon/pool/index.js.map +1 -1
- package/lib/api/impl/validator/index.d.ts.map +1 -1
- package/lib/api/impl/validator/index.js +103 -49
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/chain/blocks/importBlock.d.ts.map +1 -1
- package/lib/chain/blocks/importBlock.js +5 -2
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
- package/lib/chain/blocks/importExecutionPayload.js +4 -2
- package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
- package/lib/chain/chain.d.ts +3 -2
- package/lib/chain/chain.d.ts.map +1 -1
- package/lib/chain/chain.js +5 -2
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/errors/executionPayloadBid.d.ts +24 -1
- package/lib/chain/errors/executionPayloadBid.d.ts.map +1 -1
- package/lib/chain/errors/executionPayloadBid.js +4 -0
- package/lib/chain/errors/executionPayloadBid.js.map +1 -1
- package/lib/chain/forkChoice/index.d.ts.map +1 -1
- package/lib/chain/forkChoice/index.js +14 -4
- package/lib/chain/forkChoice/index.js.map +1 -1
- package/lib/chain/interface.d.ts +2 -1
- package/lib/chain/interface.d.ts.map +1 -1
- package/lib/chain/interface.js.map +1 -1
- package/lib/chain/lightClient/index.d.ts.map +1 -1
- package/lib/chain/lightClient/index.js +1 -1
- package/lib/chain/lightClient/index.js.map +1 -1
- package/lib/chain/opPools/executionPayloadBidPool.d.ts +4 -4
- package/lib/chain/opPools/executionPayloadBidPool.d.ts.map +1 -1
- package/lib/chain/opPools/executionPayloadBidPool.js +6 -4
- package/lib/chain/opPools/executionPayloadBidPool.js.map +1 -1
- package/lib/chain/opPools/index.d.ts +1 -0
- package/lib/chain/opPools/index.d.ts.map +1 -1
- package/lib/chain/opPools/index.js +1 -0
- package/lib/chain/opPools/index.js.map +1 -1
- package/lib/chain/opPools/payloadAttestationPool.d.ts +1 -1
- package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
- package/lib/chain/opPools/payloadAttestationPool.js +30 -10
- package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
- package/lib/chain/opPools/proposerPreferencesPool.d.ts +29 -0
- package/lib/chain/opPools/proposerPreferencesPool.d.ts.map +1 -0
- package/lib/chain/opPools/proposerPreferencesPool.js +56 -0
- package/lib/chain/opPools/proposerPreferencesPool.js.map +1 -0
- package/lib/chain/prepareNextSlot.d.ts.map +1 -1
- package/lib/chain/prepareNextSlot.js +2 -1
- package/lib/chain/prepareNextSlot.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts +7 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +107 -18
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/validation/executionPayloadBid.d.ts +7 -3
- package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
- package/lib/chain/validation/executionPayloadBid.js +87 -23
- package/lib/chain/validation/executionPayloadBid.js.map +1 -1
- package/lib/chain/validation/payloadAttestationMessage.d.ts +1 -1
- package/lib/chain/validation/payloadAttestationMessage.d.ts.map +1 -1
- package/lib/chain/validation/payloadAttestationMessage.js +5 -3
- package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
- package/lib/chain/validatorMonitor.d.ts +1 -0
- package/lib/chain/validatorMonitor.d.ts.map +1 -1
- package/lib/chain/validatorMonitor.js +16 -0
- package/lib/chain/validatorMonitor.js.map +1 -1
- package/lib/execution/builder/index.d.ts +1 -2
- package/lib/execution/builder/index.d.ts.map +1 -1
- package/lib/execution/builder/index.js +0 -1
- package/lib/execution/builder/index.js.map +1 -1
- package/lib/execution/engine/interface.d.ts +1 -0
- package/lib/execution/engine/interface.d.ts.map +1 -1
- package/lib/execution/engine/types.d.ts +2 -0
- package/lib/execution/engine/types.d.ts.map +1 -1
- package/lib/execution/engine/types.js +2 -0
- package/lib/execution/engine/types.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +1 -1
- package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
- package/lib/metrics/metrics/lodestar.js +4 -3
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/network/gossip/topic.d.ts +1 -1
- package/lib/network/interface.d.ts +2 -0
- package/lib/network/interface.d.ts.map +1 -1
- package/lib/network/network.d.ts +2 -0
- package/lib/network/network.d.ts.map +1 -1
- package/lib/network/network.js +10 -0
- package/lib/network/network.js.map +1 -1
- package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
- package/lib/network/processor/gossipHandlers.js +19 -6
- package/lib/network/processor/gossipHandlers.js.map +1 -1
- package/lib/util/dependentRoot.d.ts +6 -2
- package/lib/util/dependentRoot.d.ts.map +1 -1
- package/lib/util/dependentRoot.js +20 -16
- package/lib/util/dependentRoot.js.map +1 -1
- package/package.json +14 -15
- package/src/api/impl/beacon/blocks/index.ts +36 -0
- package/src/api/impl/beacon/pool/index.ts +58 -4
- package/src/api/impl/validator/index.ts +118 -50
- package/src/chain/blocks/importBlock.ts +9 -2
- package/src/chain/blocks/importExecutionPayload.ts +7 -1
- package/src/chain/chain.ts +5 -0
- package/src/chain/errors/executionPayloadBid.ts +25 -1
- package/src/chain/forkChoice/index.ts +14 -4
- package/src/chain/interface.ts +2 -0
- package/src/chain/lightClient/index.ts +6 -6
- package/src/chain/opPools/executionPayloadBidPool.ts +10 -9
- package/src/chain/opPools/index.ts +1 -0
- package/src/chain/opPools/payloadAttestationPool.ts +34 -10
- package/src/chain/opPools/proposerPreferencesPool.ts +59 -0
- package/src/chain/prepareNextSlot.ts +2 -1
- package/src/chain/produceBlock/produceBlockBody.ts +158 -25
- package/src/chain/validation/executionPayloadBid.ts +96 -28
- package/src/chain/validation/payloadAttestationMessage.ts +6 -4
- package/src/chain/validatorMonitor.ts +18 -0
- package/src/execution/builder/index.ts +1 -4
- package/src/execution/engine/interface.ts +1 -0
- package/src/execution/engine/types.ts +4 -0
- package/src/metrics/metrics/lodestar.ts +4 -3
- package/src/network/interface.ts +2 -0
- package/src/network/network.ts +22 -0
- package/src/network/processor/gossipHandlers.ts +24 -6
- package/src/util/dependentRoot.ts +22 -18
- package/lib/execution/builder/utils.d.ts +0 -5
- package/lib/execution/builder/utils.d.ts.map +0 -1
- package/lib/execution/builder/utils.js +0 -17
- package/lib/execution/builder/utils.js.map +0 -1
- package/src/execution/builder/utils.ts +0 -19
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executionPayloadBidPool.d.ts","sourceRoot":"","sources":["../../../src/chain/opPools/executionPayloadBidPool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAE,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAC,aAAa,EAAC,MAAM,YAAY,CAAC;AAQzC,KAAK,YAAY,GAAG,MAAM,CAAC;AAC3B,KAAK,YAAY,GAAG,MAAM,CAAC;AAE3B;;GAEG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,iCAAiC,
|
|
1
|
+
{"version":3,"file":"executionPayloadBidPool.d.ts","sourceRoot":"","sources":["../../../src/chain/opPools/executionPayloadBidPool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAE,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAC,aAAa,EAAC,MAAM,YAAY,CAAC;AAQzC,KAAK,YAAY,GAAG,MAAM,CAAC;AAC3B,KAAK,YAAY,GAAG,MAAM,CAAC;AAE3B;;GAEG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,iCAAiC,CAGqD;IACvG,OAAO,CAAC,qBAAqB,CAAK;IAElC,IAAI,IAAI,IAAI,MAAM,CAQjB;IAED,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,yBAAyB,GAAG,aAAa,CAyBvD;IAED;;;OAGG;IACH,UAAU,CACR,IAAI,EAAE,IAAI,EACV,eAAe,EAAE,YAAY,GAAG,IAAI,EACpC,eAAe,EAAE,YAAY,GAC5B,KAAK,CAAC,yBAAyB,GAAG,IAAI,CAIxC;IAED,KAAK,CAAC,SAAS,EAAE,IAAI,GAAG,IAAI,CAE3B;CACF"}
|
|
@@ -6,7 +6,7 @@ import { pruneBySlot } from "./utils.js";
|
|
|
6
6
|
*/
|
|
7
7
|
const SLOTS_RETAINED = 2;
|
|
8
8
|
/**
|
|
9
|
-
* Store the best execution payload bid per slot / (parent block root, parent block hash).
|
|
9
|
+
* Store the best signed execution payload bid per slot / (parent block root, parent block hash).
|
|
10
10
|
*/
|
|
11
11
|
export class ExecutionPayloadBidPool {
|
|
12
12
|
bidByParentHashByParentRootBySlot = new MapDef(() => new MapDef(() => new Map()));
|
|
@@ -21,7 +21,7 @@ export class ExecutionPayloadBidPool {
|
|
|
21
21
|
return count;
|
|
22
22
|
}
|
|
23
23
|
add(bid) {
|
|
24
|
-
const { slot, parentBlockRoot, parentBlockHash, value } = bid;
|
|
24
|
+
const { slot, parentBlockRoot, parentBlockHash, value } = bid.message;
|
|
25
25
|
const lowestPermissibleSlot = this.lowestPermissibleSlot;
|
|
26
26
|
if (slot < lowestPermissibleSlot) {
|
|
27
27
|
return InsertOutcome.Old;
|
|
@@ -31,7 +31,7 @@ export class ExecutionPayloadBidPool {
|
|
|
31
31
|
const bidByParentHash = this.bidByParentHashByParentRootBySlot.getOrDefault(slot).getOrDefault(parentRootHex);
|
|
32
32
|
const existing = bidByParentHash.get(parentHashHex);
|
|
33
33
|
if (existing) {
|
|
34
|
-
const existingValue = existing.value;
|
|
34
|
+
const existingValue = existing.message.value;
|
|
35
35
|
const newValue = value;
|
|
36
36
|
if (newValue > existingValue) {
|
|
37
37
|
bidByParentHash.set(parentHashHex, bid);
|
|
@@ -43,10 +43,12 @@ export class ExecutionPayloadBidPool {
|
|
|
43
43
|
return InsertOutcome.NewData;
|
|
44
44
|
}
|
|
45
45
|
/**
|
|
46
|
-
* Return the highest-value bid matching slot, parent block hash, and parent block root.
|
|
46
|
+
* Return the highest-value signed bid matching slot, parent block hash, and parent block root.
|
|
47
47
|
* Used for gossip validation and block production.
|
|
48
48
|
*/
|
|
49
49
|
getBestBid(slot, parentBlockHash, parentBlockRoot) {
|
|
50
|
+
if (parentBlockHash === null)
|
|
51
|
+
return null;
|
|
50
52
|
const bidByParentHash = this.bidByParentHashByParentRootBySlot.get(slot)?.get(parentBlockRoot);
|
|
51
53
|
return bidByParentHash?.get(parentBlockHash) ?? null;
|
|
52
54
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executionPayloadBidPool.js","sourceRoot":"","sources":["../../../src/chain/opPools/executionPayloadBidPool.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAC,aAAa,EAAC,MAAM,YAAY,CAAC;AACzC,OAAO,EAAC,WAAW,EAAC,MAAM,YAAY,CAAC;AAEvC;;GAEG;AACH,MAAM,cAAc,GAAG,CAAC,CAAC;AAKzB;;GAEG;AACH,MAAM,OAAO,uBAAuB;IACjB,iCAAiC,GAAG,IAAI,MAAM,CAG7D,GAAG,EAAE,CAAC,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"executionPayloadBidPool.js","sourceRoot":"","sources":["../../../src/chain/opPools/executionPayloadBidPool.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAC,aAAa,EAAC,MAAM,YAAY,CAAC;AACzC,OAAO,EAAC,WAAW,EAAC,MAAM,YAAY,CAAC;AAEvC;;GAEG;AACH,MAAM,cAAc,GAAG,CAAC,CAAC;AAKzB;;GAEG;AACH,MAAM,OAAO,uBAAuB;IACjB,iCAAiC,GAAG,IAAI,MAAM,CAG7D,GAAG,EAAE,CAAC,IAAI,MAAM,CAAmE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;IAC/F,qBAAqB,GAAG,CAAC,CAAC;IAElC,IAAI,IAAI,GAAW;QACjB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,iCAAiC,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3E,KAAK,MAAM,YAAY,IAAI,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;gBACjD,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IAAA,CACd;IAED,GAAG,CAAC,GAAoC,EAAiB;QACvD,MAAM,EAAC,IAAI,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK,EAAC,GAAG,GAAG,CAAC,OAAO,CAAC;QACpE,MAAM,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC;QAEzD,IAAI,IAAI,GAAG,qBAAqB,EAAE,CAAC;YACjC,OAAO,aAAa,CAAC,GAAG,CAAC;QAC3B,CAAC;QAED,MAAM,aAAa,GAAG,SAAS,CAAC,eAAe,CAAC,CAAC;QACjD,MAAM,aAAa,GAAG,SAAS,CAAC,eAAe,CAAC,CAAC;QACjD,MAAM,eAAe,GAAG,IAAI,CAAC,iCAAiC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QAC9G,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAEpD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;YAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC;YACvB,IAAI,QAAQ,GAAG,aAAa,EAAE,CAAC;gBAC7B,eAAe,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;gBACxC,OAAO,aAAa,CAAC,OAAO,CAAC;YAC/B,CAAC;YACD,OAAO,QAAQ,KAAK,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC;QAC/F,CAAC;QAED,eAAe,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QACxC,OAAO,aAAa,CAAC,OAAO,CAAC;IAAA,CAC9B;IAED;;;OAGG;IACH,UAAU,CACR,IAAU,EACV,eAAoC,EACpC,eAA6B,EACW;QACxC,IAAI,eAAe,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC1C,MAAM,eAAe,GAAG,IAAI,CAAC,iCAAiC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;QAC/F,OAAO,eAAe,EAAE,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC;IAAA,CACtD;IAED,KAAK,CAAC,SAAe,EAAQ;QAC3B,IAAI,CAAC,qBAAqB,GAAG,WAAW,CAAC,IAAI,CAAC,iCAAiC,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;IAAA,CAC7G;CACF"}
|
|
@@ -3,6 +3,7 @@ export { AttestationPool } from "./attestationPool.js";
|
|
|
3
3
|
export { ExecutionPayloadBidPool } from "./executionPayloadBidPool.js";
|
|
4
4
|
export { OpPool } from "./opPool.js";
|
|
5
5
|
export { PayloadAttestationPool } from "./payloadAttestationPool.js";
|
|
6
|
+
export { ProposerPreferencesPool } from "./proposerPreferencesPool.js";
|
|
6
7
|
export { SyncCommitteeMessagePool } from "./syncCommitteeMessagePool.js";
|
|
7
8
|
export { SyncContributionAndProofPool } from "./syncContributionAndProofPool.js";
|
|
8
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/chain/opPools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,yBAAyB,EAAC,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAC,uBAAuB,EAAC,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACnC,OAAO,EAAC,sBAAsB,EAAC,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAC,wBAAwB,EAAC,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAC,4BAA4B,EAAC,MAAM,mCAAmC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/chain/opPools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,yBAAyB,EAAC,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAC,uBAAuB,EAAC,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACnC,OAAO,EAAC,sBAAsB,EAAC,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAC,uBAAuB,EAAC,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAC,wBAAwB,EAAC,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAC,4BAA4B,EAAC,MAAM,mCAAmC,CAAC"}
|
|
@@ -3,6 +3,7 @@ export { AttestationPool } from "./attestationPool.js";
|
|
|
3
3
|
export { ExecutionPayloadBidPool } from "./executionPayloadBidPool.js";
|
|
4
4
|
export { OpPool } from "./opPool.js";
|
|
5
5
|
export { PayloadAttestationPool } from "./payloadAttestationPool.js";
|
|
6
|
+
export { ProposerPreferencesPool } from "./proposerPreferencesPool.js";
|
|
6
7
|
export { SyncCommitteeMessagePool } from "./syncCommitteeMessagePool.js";
|
|
7
8
|
export { SyncContributionAndProofPool } from "./syncContributionAndProofPool.js";
|
|
8
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/chain/opPools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,yBAAyB,EAAC,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAC,uBAAuB,EAAC,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACnC,OAAO,EAAC,sBAAsB,EAAC,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAC,wBAAwB,EAAC,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAC,4BAA4B,EAAC,MAAM,mCAAmC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/chain/opPools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,yBAAyB,EAAC,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAC,uBAAuB,EAAC,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACnC,OAAO,EAAC,sBAAsB,EAAC,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAC,uBAAuB,EAAC,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAC,wBAAwB,EAAC,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAC,4BAA4B,EAAC,MAAM,mCAAmC,CAAC"}
|
|
@@ -12,7 +12,7 @@ export declare class PayloadAttestationPool {
|
|
|
12
12
|
private lowestPermissibleSlot;
|
|
13
13
|
constructor(config: ChainForkConfig, clock: IClock, metrics?: Metrics | null);
|
|
14
14
|
get size(): number;
|
|
15
|
-
add(message: gloas.PayloadAttestationMessage, payloadAttDataRootHex: RootHex,
|
|
15
|
+
add(message: gloas.PayloadAttestationMessage, payloadAttDataRootHex: RootHex, validatorCommitteeIndices: number[]): InsertOutcome;
|
|
16
16
|
/**
|
|
17
17
|
* Get payload attestations to be included in a block.
|
|
18
18
|
* Pick the top `MAX_PAYLOAD_ATTESTATIONS` aggregates with the most votes.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payloadAttestationPool.d.ts","sourceRoot":"","sources":["../../../src/chain/opPools/payloadAttestationPool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAErD,OAAO,EAAC,OAAO,EAAC,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAC,MAAM,EAAC,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAC,aAAa,EAA+B,MAAM,YAAY,CAAC;AAiBvE,KAAK,YAAY,GAAG,MAAM,CAAC;AAQ3B,qBAAa,sBAAsB;IAQ/B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAT1B,OAAO,CAAC,QAAQ,CAAC,oCAAoC,CAGa;IAClE,OAAO,CAAC,qBAAqB,CAAK;IAElC,YACmB,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,OAAO,GAAG,IAAW,EAC7C;IAEJ,IAAI,IAAI,IAAI,MAAM,CAQjB;IAED,GAAG,CACD,OAAO,EAAE,KAAK,CAAC,yBAAyB,EACxC,qBAAqB,EAAE,OAAO,EAC9B,
|
|
1
|
+
{"version":3,"file":"payloadAttestationPool.d.ts","sourceRoot":"","sources":["../../../src/chain/opPools/payloadAttestationPool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAErD,OAAO,EAAC,OAAO,EAAC,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAC,MAAM,EAAC,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAC,aAAa,EAA+B,MAAM,YAAY,CAAC;AAiBvE,KAAK,YAAY,GAAG,MAAM,CAAC;AAQ3B,qBAAa,sBAAsB;IAQ/B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAT1B,OAAO,CAAC,QAAQ,CAAC,oCAAoC,CAGa;IAClE,OAAO,CAAC,qBAAqB,CAAK;IAElC,YACmB,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,OAAO,GAAG,IAAW,EAC7C;IAEJ,IAAI,IAAI,IAAI,MAAM,CAQjB;IAED,GAAG,CACD,OAAO,EAAE,KAAK,CAAC,yBAAyB,EACxC,qBAAqB,EAAE,OAAO,EAC9B,yBAAyB,EAAE,MAAM,EAAE,GAClC,aAAa,CAiCf;IAED;;;OAGG;IACH,8BAA8B,CAAC,eAAe,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAoBpG;IAED,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAuB9C;IAED,KAAK,CAAC,SAAS,EAAE,IAAI,GAAG,IAAI,CAG3B;CACF"}
|
|
@@ -35,7 +35,7 @@ export class PayloadAttestationPool {
|
|
|
35
35
|
}
|
|
36
36
|
return count;
|
|
37
37
|
}
|
|
38
|
-
add(message, payloadAttDataRootHex,
|
|
38
|
+
add(message, payloadAttDataRootHex, validatorCommitteeIndices) {
|
|
39
39
|
const slot = message.data.slot;
|
|
40
40
|
const lowestPermissibleSlot = this.lowestPermissibleSlot;
|
|
41
41
|
if (slot < lowestPermissibleSlot) {
|
|
@@ -56,10 +56,10 @@ export class PayloadAttestationPool {
|
|
|
56
56
|
const aggregate = aggregateByDataRoot.get(payloadAttDataRootHex);
|
|
57
57
|
if (aggregate) {
|
|
58
58
|
// Aggregate msg into aggregate
|
|
59
|
-
return aggregateMessageInto(message,
|
|
59
|
+
return aggregateMessageInto(message, validatorCommitteeIndices, aggregate);
|
|
60
60
|
}
|
|
61
61
|
// Create a new aggregate with data
|
|
62
|
-
aggregateByDataRoot.set(payloadAttDataRootHex, messageToAggregate(message,
|
|
62
|
+
aggregateByDataRoot.set(payloadAttDataRootHex, messageToAggregate(message, validatorCommitteeIndices));
|
|
63
63
|
return InsertOutcome.NewData;
|
|
64
64
|
}
|
|
65
65
|
/**
|
|
@@ -110,19 +110,39 @@ export class PayloadAttestationPool {
|
|
|
110
110
|
this.lowestPermissibleSlot = clockSlot;
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
|
-
function messageToAggregate(message,
|
|
113
|
+
function messageToAggregate(message, validatorCommitteeIndices) {
|
|
114
|
+
const aggregationBits = BitArray.fromBitLen(PTC_SIZE);
|
|
115
|
+
for (const index of validatorCommitteeIndices) {
|
|
116
|
+
aggregationBits.set(index, true);
|
|
117
|
+
}
|
|
118
|
+
const sig = signatureFromBytesNoCheck(message.signature);
|
|
119
|
+
// The validator signed once but occupies `validatorCommitteeIndices.length` PTC positions.
|
|
120
|
+
// Verification aggregates the pubkey once per set bit, so the signature must be aggregated
|
|
121
|
+
// the same number of times for the BLS check to balance — same pattern as sync committee.
|
|
122
|
+
const signature = validatorCommitteeIndices.length === 1
|
|
123
|
+
? sig
|
|
124
|
+
: aggregateSignatures(new Array(validatorCommitteeIndices.length).fill(sig));
|
|
114
125
|
return {
|
|
115
|
-
aggregationBits
|
|
126
|
+
aggregationBits,
|
|
116
127
|
data: message.data,
|
|
117
|
-
signature
|
|
128
|
+
signature,
|
|
118
129
|
};
|
|
119
130
|
}
|
|
120
|
-
function aggregateMessageInto(message,
|
|
121
|
-
|
|
131
|
+
function aggregateMessageInto(message, validatorCommitteeIndices, aggregate) {
|
|
132
|
+
// Gossip dedup via `seenPayloadAttesters` is keyed by (epoch, validatorIndex), so the same
|
|
133
|
+
// validator's message is never processed twice — all of its bits are set together or none.
|
|
134
|
+
// Checking the first index is sufficient.
|
|
135
|
+
if (aggregate.aggregationBits.get(validatorCommitteeIndices[0]) === true) {
|
|
122
136
|
return InsertOutcome.AlreadyKnown;
|
|
123
137
|
}
|
|
124
|
-
|
|
125
|
-
|
|
138
|
+
for (const index of validatorCommitteeIndices) {
|
|
139
|
+
aggregate.aggregationBits.set(index, true);
|
|
140
|
+
}
|
|
141
|
+
const sig = signatureFromBytesNoCheck(message.signature);
|
|
142
|
+
aggregate.signature = aggregateSignatures([
|
|
143
|
+
aggregate.signature,
|
|
144
|
+
...new Array(validatorCommitteeIndices.length).fill(sig),
|
|
145
|
+
]);
|
|
126
146
|
return InsertOutcome.Aggregated;
|
|
127
147
|
}
|
|
128
148
|
function fastToPayloadAttestation(aggFast) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payloadAttestationPool.js","sourceRoot":"","sources":["../../../src/chain/opPools/payloadAttestationPool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AAExC,OAAO,EAAC,uBAAuB,EAAE,wBAAwB,EAAE,QAAQ,EAAC,MAAM,kBAAkB,CAAC;AAE7F,OAAO,EAAC,MAAM,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAGlD,OAAO,EAAC,aAAa,EAAE,WAAW,EAAE,eAAe,EAAC,MAAM,YAAY,CAAC;AACvE,OAAO,EAAC,WAAW,EAAE,yBAAyB,EAAC,MAAM,YAAY,CAAC;AAElE;;GAEG;AACH,MAAM,cAAc,GAAG,CAAC,CAAC;AAEzB;;;;GAIG;AACH,0IAA0I;AAC1I,MAAM,iCAAiC,GAAG,MAAM,GAAG,uBAAuB,CAAC;AAW3E,MAAM,OAAO,sBAAsB;IAQd,MAAM;IACN,KAAK;IACL,OAAO;IATT,oCAAoC,GAAG,IAAI,MAAM,CAGhE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAiD,CAAC,CAAC;IAC1D,qBAAqB,GAAG,CAAC,CAAC;IAElC,YACmB,MAAuB,EACvB,KAAa,EACb,OAAO,GAAmB,IAAI,EAC/C;sBAHiB,MAAM;qBACN,KAAK;uBACL,OAAO;IACvB,CAAC;IAEJ,IAAI,IAAI,GAAW;QACjB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,8BAA8B,IAAI,IAAI,CAAC,oCAAoC,CAAC,MAAM,EAAE,EAAE,CAAC;YAChG,KAAK,MAAM,mBAAmB,IAAI,8BAA8B,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC1E,KAAK,IAAI,mBAAmB,CAAC,IAAI,CAAC;YACpC,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IAAA,CACd;IAED,GAAG,CACD,OAAwC,EACxC,qBAA8B,EAC9B,
|
|
1
|
+
{"version":3,"file":"payloadAttestationPool.js","sourceRoot":"","sources":["../../../src/chain/opPools/payloadAttestationPool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { RootHex, Slot, gloas } from "@lodestar/types";
|
|
2
|
+
/**
|
|
3
|
+
* Pool of validated `SignedProposerPreferences` indexed by `(slot, dependent_root)`.
|
|
4
|
+
*
|
|
5
|
+
* The primary consumer is `validateExecutionPayloadBid`, which looks up the matching
|
|
6
|
+
* preferences via `get(bid.slot, dependent_root)` to enforce the IGNORE-existence and
|
|
7
|
+
* REJECT-equality rules from the gloas spec. The beacon API `/pool/proposer_preferences`
|
|
8
|
+
* GET endpoint reads from the same pool via `getAll`.
|
|
9
|
+
*
|
|
10
|
+
* `validator_index` is intentionally not part of the key: gossip validation enforces
|
|
11
|
+
* `proposers[proposalSlot % SLOTS_PER_EPOCH] === validatorIndex` against the shuffling
|
|
12
|
+
* implied by `dependent_root`, so once a preference has been validated `(slot, dependent_root)`
|
|
13
|
+
* already pins down the validator.
|
|
14
|
+
*/
|
|
15
|
+
export declare class ProposerPreferencesPool {
|
|
16
|
+
private readonly bySlot;
|
|
17
|
+
/** Lookup for bid validation: matches `(bid.slot, get_proposer_dependent_root(parent_state, ...))`. */
|
|
18
|
+
get(slot: Slot, dependentRootHex: RootHex): gloas.SignedProposerPreferences | null;
|
|
19
|
+
add(signed: gloas.SignedProposerPreferences): void;
|
|
20
|
+
/** API read-out: flatten across branches, optionally filtered by slot. */
|
|
21
|
+
getAll(slot?: Slot): gloas.SignedProposerPreferences[];
|
|
22
|
+
/**
|
|
23
|
+
* Entries are only load-bearing while `proposal_slot >= current_slot`. Once the slot has
|
|
24
|
+
* passed the `[IGNORE] proposal_slot > current_slot` gossip rule takes over, so drop them
|
|
25
|
+
* on each slot tick.
|
|
26
|
+
*/
|
|
27
|
+
prune(currentSlot: Slot): void;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=proposerPreferencesPool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proposerPreferencesPool.d.ts","sourceRoot":"","sources":["../../../src/chain/opPools/proposerPreferencesPool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAGrD;;;;;;;;;;;;GAYG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkE;IAEzF,uGAAuG;IACvG,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,GAAG,KAAK,CAAC,yBAAyB,GAAG,IAAI,CAEjF;IAED,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,yBAAyB,GAAG,IAAI,CASjD;IAED,0EAA0E;IAC1E,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,yBAAyB,EAAE,CAUrD;IAED;;;;OAIG;IACH,KAAK,CAAC,WAAW,EAAE,IAAI,GAAG,IAAI,CAI7B;CACF"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { toRootHex } from "@lodestar/utils";
|
|
2
|
+
/**
|
|
3
|
+
* Pool of validated `SignedProposerPreferences` indexed by `(slot, dependent_root)`.
|
|
4
|
+
*
|
|
5
|
+
* The primary consumer is `validateExecutionPayloadBid`, which looks up the matching
|
|
6
|
+
* preferences via `get(bid.slot, dependent_root)` to enforce the IGNORE-existence and
|
|
7
|
+
* REJECT-equality rules from the gloas spec. The beacon API `/pool/proposer_preferences`
|
|
8
|
+
* GET endpoint reads from the same pool via `getAll`.
|
|
9
|
+
*
|
|
10
|
+
* `validator_index` is intentionally not part of the key: gossip validation enforces
|
|
11
|
+
* `proposers[proposalSlot % SLOTS_PER_EPOCH] === validatorIndex` against the shuffling
|
|
12
|
+
* implied by `dependent_root`, so once a preference has been validated `(slot, dependent_root)`
|
|
13
|
+
* already pins down the validator.
|
|
14
|
+
*/
|
|
15
|
+
export class ProposerPreferencesPool {
|
|
16
|
+
bySlot = new Map();
|
|
17
|
+
/** Lookup for bid validation: matches `(bid.slot, get_proposer_dependent_root(parent_state, ...))`. */
|
|
18
|
+
get(slot, dependentRootHex) {
|
|
19
|
+
return this.bySlot.get(slot)?.get(dependentRootHex) ?? null;
|
|
20
|
+
}
|
|
21
|
+
add(signed) {
|
|
22
|
+
const { proposalSlot, dependentRoot } = signed.message;
|
|
23
|
+
const rootHex = toRootHex(dependentRoot);
|
|
24
|
+
let byRoot = this.bySlot.get(proposalSlot);
|
|
25
|
+
if (!byRoot) {
|
|
26
|
+
byRoot = new Map();
|
|
27
|
+
this.bySlot.set(proposalSlot, byRoot);
|
|
28
|
+
}
|
|
29
|
+
byRoot.set(rootHex, signed);
|
|
30
|
+
}
|
|
31
|
+
/** API read-out: flatten across branches, optionally filtered by slot. */
|
|
32
|
+
getAll(slot) {
|
|
33
|
+
if (slot !== undefined) {
|
|
34
|
+
const byRoot = this.bySlot.get(slot);
|
|
35
|
+
return byRoot ? Array.from(byRoot.values()) : [];
|
|
36
|
+
}
|
|
37
|
+
const out = [];
|
|
38
|
+
for (const byRoot of this.bySlot.values()) {
|
|
39
|
+
for (const v of byRoot.values())
|
|
40
|
+
out.push(v);
|
|
41
|
+
}
|
|
42
|
+
return out;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Entries are only load-bearing while `proposal_slot >= current_slot`. Once the slot has
|
|
46
|
+
* passed the `[IGNORE] proposal_slot > current_slot` gossip rule takes over, so drop them
|
|
47
|
+
* on each slot tick.
|
|
48
|
+
*/
|
|
49
|
+
prune(currentSlot) {
|
|
50
|
+
for (const slot of this.bySlot.keys()) {
|
|
51
|
+
if (slot < currentSlot)
|
|
52
|
+
this.bySlot.delete(slot);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=proposerPreferencesPool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proposerPreferencesPool.js","sourceRoot":"","sources":["../../../src/chain/opPools/proposerPreferencesPool.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAE1C;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,uBAAuB;IACjB,MAAM,GAAG,IAAI,GAAG,EAAuD,CAAC;IAEzF,uGAAuG;IACvG,GAAG,CAAC,IAAU,EAAE,gBAAyB,EAA0C;QACjF,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC;IAAA,CAC7D;IAED,GAAG,CAAC,MAAuC,EAAQ;QACjD,MAAM,EAAC,YAAY,EAAE,aAAa,EAAC,GAAG,MAAM,CAAC,OAAO,CAAC;QACrD,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC;QACzC,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACxC,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAAA,CAC7B;IAED,0EAA0E;IAC1E,MAAM,CAAC,IAAW,EAAqC;QACrD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACrC,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,CAAC;QACD,MAAM,GAAG,GAAsC,EAAE,CAAC;QAClD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,GAAG,CAAC;IAAA,CACZ;IAED;;;;OAIG;IACH,KAAK,CAAC,WAAiB,EAAQ;QAC7B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YACtC,IAAI,IAAI,GAAG,WAAW;gBAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC;IAAA,CACF;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepareNextSlot.d.ts","sourceRoot":"","sources":["../../src/chain/prepareNextSlot.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAGjD,OAAO,EACL,gBAAgB,EAOjB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAC,MAAM,EAAiC,MAAM,iBAAiB,CAAC;AAGvE,OAAO,EAAC,OAAO,EAAC,MAAM,qBAAqB,CAAC;AAI5C,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAM5C,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAK1C;;;;;;;;;;GAUG;AACH,qBAAa,wBAAwB;IAEjC,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IALzB,YACmB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,OAAO,GAAG,IAAI,EACvB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,EAUrC;IAED;;OAEG;IACH,kBAAkB,
|
|
1
|
+
{"version":3,"file":"prepareNextSlot.d.ts","sourceRoot":"","sources":["../../src/chain/prepareNextSlot.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAGjD,OAAO,EACL,gBAAgB,EAOjB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAC,MAAM,EAAiC,MAAM,iBAAiB,CAAC;AAGvE,OAAO,EAAC,OAAO,EAAC,MAAM,qBAAqB,CAAC;AAI5C,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAM5C,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAK1C;;;;;;;;;;GAUG;AACH,qBAAa,wBAAwB;IAEjC,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IALzB,YACmB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,OAAO,GAAG,IAAI,EACvB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,EAUrC;IAED;;OAEG;IACH,kBAAkB,uCAqNhB;IAEF,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,OAAO,GAAG,IAAI,CAQlF;CACF"}
|
|
@@ -133,7 +133,8 @@ export class PrepareNextSlotScheduler {
|
|
|
133
133
|
// Apply parent payload once here as it's reused by EL prep and SSE emit below
|
|
134
134
|
let stateAfterParentPayload = updatedPrepareState;
|
|
135
135
|
if (isStatePostGloas(updatedPrepareState)) {
|
|
136
|
-
|
|
136
|
+
// Spec: should_build_on_full(store, head) — see produceBlockBody.ts for context.
|
|
137
|
+
if (this.chain.forkChoice.shouldBuildOnFull(updatedHead)) {
|
|
137
138
|
parentBlockHash = updatedPrepareState.latestExecutionPayloadBid.blockHash;
|
|
138
139
|
// Skip applying parent payload unless we're proposing the next slot or have to emit payload_attributes events
|
|
139
140
|
if (feeRecipient !== undefined || this.chain.opts.emitPayloadAttributes === true) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepareNextSlot.js","sourceRoot":"","sources":["../../src/chain/prepareNextSlot.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"prepareNextSlot.js","sourceRoot":"","sources":["../../src/chain/prepareNextSlot.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,11 +2,12 @@ import { ChainForkConfig } from "@lodestar/config";
|
|
|
2
2
|
import { IForkChoice, ProtoBlock } from "@lodestar/fork-choice";
|
|
3
3
|
import { ForkName, ForkPostBellatrix, ForkPostDeneb, ForkPostFulu, ForkPostGloas } from "@lodestar/params";
|
|
4
4
|
import { IBeaconStateView, type IBeaconStateViewBellatrix } from "@lodestar/state-transition";
|
|
5
|
-
import { BLSPubkey, BLSSignature, BeaconBlock, BeaconBlockBody, BlindedBeaconBlock, BlindedBeaconBlockBody, BlobsBundle, Bytes32, ExecutionPayload, Root, RootHex, SSEPayloadAttributes, Slot, ValidatorIndex, Wei, electra, fulu } from "@lodestar/types";
|
|
5
|
+
import { BLSPubkey, BLSSignature, BeaconBlock, BeaconBlockBody, BlindedBeaconBlock, BlindedBeaconBlockBody, BlobsBundle, Bytes32, ExecutionPayload, Root, RootHex, SSEPayloadAttributes, Slot, ValidatorIndex, Wei, electra, fulu, gloas } from "@lodestar/types";
|
|
6
6
|
import { Logger } from "@lodestar/utils";
|
|
7
7
|
import { IExecutionEngine, PayloadId } from "../../execution/index.js";
|
|
8
8
|
import type { BeaconChain } from "../chain.js";
|
|
9
9
|
import { CommonBlockBody } from "../interface.js";
|
|
10
|
+
import { ProposerPreferencesPool } from "../opPools/index.js";
|
|
10
11
|
export declare enum PayloadPreparationType {
|
|
11
12
|
Fresh = "Fresh",
|
|
12
13
|
Cached = "Cached",
|
|
@@ -31,6 +32,8 @@ export type BlockAttributes = {
|
|
|
31
32
|
slot: Slot;
|
|
32
33
|
parentBlock: ProtoBlock;
|
|
33
34
|
feeRecipient?: string;
|
|
35
|
+
/** When provided, build block with this builder bid instead of a self-build bid */
|
|
36
|
+
builderBid?: gloas.SignedExecutionPayloadBid;
|
|
34
37
|
};
|
|
35
38
|
export declare enum BlockType {
|
|
36
39
|
Full = "Full",
|
|
@@ -91,6 +94,8 @@ export declare function produceBlockBody<T extends BlockType>(this: BeaconChain,
|
|
|
91
94
|
export declare function prepareExecutionPayload(chain: {
|
|
92
95
|
executionEngine: IExecutionEngine;
|
|
93
96
|
config: ChainForkConfig;
|
|
97
|
+
forkChoice: IForkChoice;
|
|
98
|
+
proposerPreferencesPool: ProposerPreferencesPool;
|
|
94
99
|
}, logger: Logger, fork: ForkPostBellatrix, parentBlockRoot: Root, parentBlockHash: Bytes32, safeBlockHash: RootHex, finalizedBlockHash: RootHex,
|
|
95
100
|
/**
|
|
96
101
|
* Post-gloas, when extending a full parent, callers must apply
|
|
@@ -103,6 +108,7 @@ state: IBeaconStateViewBellatrix, suggestedFeeRecipient: string): Promise<{
|
|
|
103
108
|
export declare function getPayloadAttributesForSSE(fork: ForkPostBellatrix, chain: {
|
|
104
109
|
config: ChainForkConfig;
|
|
105
110
|
forkChoice: IForkChoice;
|
|
111
|
+
proposerPreferencesPool: ProposerPreferencesPool;
|
|
106
112
|
}, { prepareState, prepareSlot, parentBlockRoot, parentBlockHash, feeRecipient }: {
|
|
107
113
|
/**
|
|
108
114
|
* Post-gloas, when extending a full parent, callers must apply
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"produceBlockBody.d.ts","sourceRoot":"","sources":["../../../src/chain/produceBlock/produceBlockBody.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAC,WAAW,EAAE,UAAU,EAA4B,MAAM,uBAAuB,CAAC;AACzF,OAAO,EAEL,QAAQ,EACR,iBAAiB,EAEjB,aAAa,EACb,YAAY,EACZ,aAAa,EAMd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEL,gBAAgB,EAChB,KAAK,yBAAyB,
|
|
1
|
+
{"version":3,"file":"produceBlockBody.d.ts","sourceRoot":"","sources":["../../../src/chain/produceBlock/produceBlockBody.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { getSafeExecutionBlockHash } from "@lodestar/fork-choice";
|
|
2
2
|
import { BUILDER_INDEX_SELF_BUILD, ForkSeq, isForkPostAltair, isForkPostBellatrix, isForkPostGloas, } from "@lodestar/params";
|
|
3
|
-
import { G2_POINT_AT_INFINITY, computeTimeAtSlot, isStatePostBellatrix, isStatePostCapella, isStatePostGloas, } from "@lodestar/state-transition";
|
|
3
|
+
import { G2_POINT_AT_INFINITY, computeEpochAtSlot, computeTimeAtSlot, getExpectedGasLimit, isStatePostBellatrix, isStatePostCapella, isStatePostGloas, } from "@lodestar/state-transition";
|
|
4
4
|
import { ssz, } from "@lodestar/types";
|
|
5
|
-
import { byteArrayEquals, fromHex, sleep, toHex, toPubkeyHex, toRootHex } from "@lodestar/utils";
|
|
5
|
+
import { GWEI_TO_WEI, byteArrayEquals, fromHex, sleep, toHex, toPubkeyHex, toRootHex } from "@lodestar/utils";
|
|
6
6
|
import { ZERO_HASH_HEX } from "../../constants/index.js";
|
|
7
7
|
import { numToQuantity } from "../../execution/engine/utils.js";
|
|
8
|
-
import {
|
|
8
|
+
import { getShufflingDependentRoot } from "../../util/dependentRoot.js";
|
|
9
9
|
import { fromGraffitiBytes } from "../../util/graffiti.js";
|
|
10
10
|
import { kzg } from "../../util/kzg.js";
|
|
11
11
|
import { validateBlobsAndKzgCommitments, validateCellsAndKzgCommitments } from "./validateBlobsAndKzgCommitments.js";
|
|
@@ -39,8 +39,23 @@ var BlockType;
|
|
|
39
39
|
BlockType["Full"] = "Full";
|
|
40
40
|
BlockType["Blinded"] = "Blinded";
|
|
41
41
|
})(BlockType || (BlockType = {}));
|
|
42
|
+
/**
|
|
43
|
+
* Drop voluntary exits that `parent_execution_requests` have invalidated (e.g. a withdrawal
|
|
44
|
+
* request initiating an exit on the same validator). Op pool selected against the unapplied
|
|
45
|
+
* state, so re-validate against the post-apply state to avoid producing an invalid block.
|
|
46
|
+
*
|
|
47
|
+
* `getStateAfterParentPayload` is a thunk so the post-apply state is only materialized when
|
|
48
|
+
* actually needed (i.e. when extending the parent payload and there are exits to filter).
|
|
49
|
+
*/
|
|
50
|
+
function maybeFilterInvalidatedVoluntaryExits(commonBlockBody, isExtendingPayload, getStateAfterParentPayload) {
|
|
51
|
+
if (!isExtendingPayload || commonBlockBody.voluntaryExits.length === 0) {
|
|
52
|
+
return commonBlockBody.voluntaryExits;
|
|
53
|
+
}
|
|
54
|
+
const state = getStateAfterParentPayload();
|
|
55
|
+
return commonBlockBody.voluntaryExits.filter((signedVoluntaryExit) => state.isValidVoluntaryExit(signedVoluntaryExit, false));
|
|
56
|
+
}
|
|
42
57
|
export async function produceBlockBody(blockType, currentState, blockAttr) {
|
|
43
|
-
const { slot: blockSlot, feeRecipient: requestedFeeRecipient, parentBlock, proposerIndex, proposerPubKey, commonBlockBodyPromise, } = blockAttr;
|
|
58
|
+
const { slot: blockSlot, feeRecipient: requestedFeeRecipient, parentBlock, proposerIndex, proposerPubKey, commonBlockBodyPromise, builderBid, } = blockAttr;
|
|
44
59
|
let executionPayloadValue;
|
|
45
60
|
let blockBody;
|
|
46
61
|
const parentBlockRoot = fromHex(parentBlock.blockRoot);
|
|
@@ -58,7 +73,33 @@ export async function produceBlockBody(blockType, currentState, blockAttr) {
|
|
|
58
73
|
slot: blockSlot,
|
|
59
74
|
};
|
|
60
75
|
this.logger.verbose("Producing beacon block body", logMeta);
|
|
61
|
-
if (
|
|
76
|
+
if (builderBid !== undefined) {
|
|
77
|
+
if (!isStatePostGloas(currentState)) {
|
|
78
|
+
throw new Error("Expected Gloas state for builder bid block production");
|
|
79
|
+
}
|
|
80
|
+
const isExtendingPayload = byteArrayEquals(builderBid.message.parentBlockHash, currentState.latestExecutionPayloadBid.blockHash);
|
|
81
|
+
const parentExecutionRequests = isExtendingPayload
|
|
82
|
+
? await this.getParentExecutionRequests(parentBlock.slot, parentBlock.blockRoot)
|
|
83
|
+
: ssz.electra.ExecutionRequests.defaultValue();
|
|
84
|
+
executionPayloadValue = BigInt(builderBid.message.value) * GWEI_TO_WEI;
|
|
85
|
+
const commonBlockBody = await commonBlockBodyPromise;
|
|
86
|
+
const gloasBody = Object.assign({}, commonBlockBody);
|
|
87
|
+
gloasBody.signedExecutionPayloadBid = builderBid;
|
|
88
|
+
gloasBody.payloadAttestations = this.payloadAttestationPool.getPayloadAttestationsForBlock(parentBlock.blockRoot, blockSlot - 1);
|
|
89
|
+
gloasBody.parentExecutionRequests = parentExecutionRequests;
|
|
90
|
+
gloasBody.voluntaryExits = maybeFilterInvalidatedVoluntaryExits(commonBlockBody, isExtendingPayload, () => currentState.withParentPayloadApplied(parentExecutionRequests));
|
|
91
|
+
blockBody = gloasBody;
|
|
92
|
+
this.logger.verbose("Produced block with builder bid", {
|
|
93
|
+
slot: blockSlot,
|
|
94
|
+
builderIndex: builderBid.message.builderIndex,
|
|
95
|
+
bidValue: builderBid.message.value,
|
|
96
|
+
parentBlockHash: toRootHex(builderBid.message.parentBlockHash),
|
|
97
|
+
parentBlockRoot: toRootHex(builderBid.message.parentBlockRoot),
|
|
98
|
+
blockHash: toRootHex(builderBid.message.blockHash),
|
|
99
|
+
isExtendingPayload,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
else if (isForkPostGloas(fork)) {
|
|
62
103
|
if (!isStatePostGloas(currentState)) {
|
|
63
104
|
throw new Error("Expected Gloas state for Gloas block production");
|
|
64
105
|
}
|
|
@@ -67,20 +108,21 @@ export async function produceBlockBody(blockType, currentState, blockAttr) {
|
|
|
67
108
|
// this into a completely separate function and have pre/post gloas more separated
|
|
68
109
|
const safeBlockHash = getSafeExecutionBlockHash(this.forkChoice);
|
|
69
110
|
const finalizedBlockHash = this.forkChoice.getFinalizedBlock().executionPayloadBlockHash ?? ZERO_HASH_HEX;
|
|
111
|
+
// TODO GLOAS: post-Gloas, proposer feeRecipient is also carried (signed) in
|
|
112
|
+
// ProposerPreferencesPool. Consider using this unified cache instead
|
|
113
|
+
// see https://github.com/ChainSafe/lodestar/issues/9379
|
|
70
114
|
const feeRecipient = requestedFeeRecipient ?? this.beaconProposerCache.getOrDefault(proposerIndex);
|
|
71
115
|
const endExecutionPayload = this.metrics?.executionBlockProductionTimeSteps.startTimer();
|
|
72
|
-
this.logger.verbose("Preparing execution payload from engine", {
|
|
73
|
-
slot: blockSlot,
|
|
74
|
-
parentBlockRoot: toRootHex(parentBlockRoot),
|
|
75
|
-
feeRecipient,
|
|
76
|
-
});
|
|
77
116
|
// Get execution payload from EL
|
|
78
117
|
let parentBlockHash;
|
|
79
118
|
let parentExecutionRequests;
|
|
80
119
|
// Apply parent payload once here as it's reused by EL prep and voluntary exit filtering below
|
|
81
120
|
let stateAfterParentPayload = currentState;
|
|
82
|
-
|
|
83
|
-
|
|
121
|
+
// Spec: should_build_on_full(store, head). `parentBlock` is the proposer's head
|
|
122
|
+
// (set by chain.getProposerHead(slot)). Returns false when the PTC majority
|
|
123
|
+
// signalled the blob data is not available, forcing a build on EMPTY (reorg).
|
|
124
|
+
const isBuildingOnFull = this.forkChoice.shouldBuildOnFull(parentBlock);
|
|
125
|
+
if (isBuildingOnFull) {
|
|
84
126
|
parentBlockHash = currentState.latestExecutionPayloadBid.blockHash;
|
|
85
127
|
parentExecutionRequests = await this.getParentExecutionRequests(parentBlock.slot, parentBlock.blockRoot);
|
|
86
128
|
stateAfterParentPayload = currentState.withParentPayloadApplied(parentExecutionRequests);
|
|
@@ -92,6 +134,15 @@ export async function produceBlockBody(blockType, currentState, blockAttr) {
|
|
|
92
134
|
const prepareRes = await prepareExecutionPayload(this, this.logger, fork, parentBlockRoot, parentBlockHash, safeBlockHash, finalizedBlockHash ?? ZERO_HASH_HEX, stateAfterParentPayload, feeRecipient);
|
|
93
135
|
const { prepType, payloadId } = prepareRes;
|
|
94
136
|
Object.assign(logMeta, { executionPayloadPrepType: prepType });
|
|
137
|
+
this.logger.verbose("Prepared execution payload from engine", {
|
|
138
|
+
slot: blockSlot,
|
|
139
|
+
parentBlockRoot: toRootHex(parentBlockRoot),
|
|
140
|
+
parentBlockHash: toRootHex(parentBlockHash),
|
|
141
|
+
feeRecipient,
|
|
142
|
+
prepType,
|
|
143
|
+
payloadId,
|
|
144
|
+
isBuildingOnFull,
|
|
145
|
+
});
|
|
95
146
|
if (prepType !== PayloadPreparationType.Cached) {
|
|
96
147
|
await sleep(PAYLOAD_GENERATION_TIME_MS);
|
|
97
148
|
}
|
|
@@ -135,12 +186,7 @@ export async function produceBlockBody(blockType, currentState, blockAttr) {
|
|
|
135
186
|
gloasBody.signedExecutionPayloadBid = signedBid;
|
|
136
187
|
gloasBody.payloadAttestations = this.payloadAttestationPool.getPayloadAttestationsForBlock(parentBlock.blockRoot, blockSlot - 1);
|
|
137
188
|
gloasBody.parentExecutionRequests = parentExecutionRequests;
|
|
138
|
-
|
|
139
|
-
// request initiating an exit on the same validator). Op pool selected against the unapplied
|
|
140
|
-
// state, so re-validate against the post-apply state to avoid producing an invalid block.
|
|
141
|
-
if (isExtendingPayload && commonBlockBody.voluntaryExits.length > 0) {
|
|
142
|
-
gloasBody.voluntaryExits = commonBlockBody.voluntaryExits.filter((signedVoluntaryExit) => stateAfterParentPayload.isValidVoluntaryExit(signedVoluntaryExit, false));
|
|
143
|
-
}
|
|
189
|
+
gloasBody.voluntaryExits = maybeFilterInvalidatedVoluntaryExits(commonBlockBody, isBuildingOnFull, () => stateAfterParentPayload);
|
|
144
190
|
blockBody = gloasBody;
|
|
145
191
|
// Store execution payload data required to construct execution payload envelope later
|
|
146
192
|
const gloasResult = produceResult;
|
|
@@ -159,6 +205,7 @@ export async function produceBlockBody(blockType, currentState, blockAttr) {
|
|
|
159
205
|
fetchedTime,
|
|
160
206
|
executionBlockHash: toRootHex(executionPayload.blockHash),
|
|
161
207
|
blobs: blobsBundle.commitments.length,
|
|
208
|
+
gasLimit: executionPayload.gasLimit,
|
|
162
209
|
});
|
|
163
210
|
Object.assign(logMeta, {
|
|
164
211
|
transactions: executionPayload.transactions.length,
|
|
@@ -535,10 +582,52 @@ function preparePayloadAttributes(fork, chain, { prepareState, prepareSlot, pare
|
|
|
535
582
|
payloadAttributes.parentBeaconBlockRoot = parentBlockRoot;
|
|
536
583
|
}
|
|
537
584
|
if (ForkSeq[fork] >= ForkSeq.gloas) {
|
|
585
|
+
if (!isStatePostGloas(prepareState)) {
|
|
586
|
+
throw new Error("Expected Gloas state for Gloas payload attributes");
|
|
587
|
+
}
|
|
538
588
|
payloadAttributes.slotNumber = prepareSlot;
|
|
589
|
+
payloadAttributes.targetGasLimit = getProposerTargetGasLimit(chain, prepareSlot, parentBlockRoot, parentBlockHash);
|
|
539
590
|
}
|
|
540
591
|
return payloadAttributes;
|
|
541
592
|
}
|
|
593
|
+
/**
|
|
594
|
+
* Resolve the proposer's preferred (target) gas limit for the Gloas `PayloadAttributesV4`
|
|
595
|
+
* `targetGasLimit` field (consensus-specs#5235, execution-apis#796).
|
|
596
|
+
*
|
|
597
|
+
* Sourced from the `SignedProposerPreferences` the proposer's VC submitted to the pool
|
|
598
|
+
* (same `(slot, dependent_root)` lookup as gossip bid validation). When no matching
|
|
599
|
+
* preferences are pooled, target the parent payload's gas limit so the gas limit stays
|
|
600
|
+
* unchanged (`is_gas_limit_target_compatible` then requires `gas_limit == parent_gas_limit`).
|
|
601
|
+
*
|
|
602
|
+
* The parent payload's gas_limit is read from fork choice — the variant matching
|
|
603
|
+
* `(parentBlockRoot, parentBlockHash)` carries the correct value for both FULL parents
|
|
604
|
+
* (FULL.executionPayloadGasLimit = delivered payload's gas_limit) and EMPTY parents
|
|
605
|
+
* (EMPTY.executionPayloadGasLimit = inherited grandparent's gas_limit).
|
|
606
|
+
*/
|
|
607
|
+
function getProposerTargetGasLimit(chain, prepareSlot, parentBlockRoot, parentBlockHash) {
|
|
608
|
+
const parentBlockRootHex = toRootHex(parentBlockRoot);
|
|
609
|
+
const parentBlock = chain.forkChoice.getBlockHexDefaultStatus(parentBlockRootHex);
|
|
610
|
+
const dependentRootHex = (() => {
|
|
611
|
+
if (parentBlock === null) {
|
|
612
|
+
return null;
|
|
613
|
+
}
|
|
614
|
+
try {
|
|
615
|
+
return getShufflingDependentRoot(chain.forkChoice, computeEpochAtSlot(prepareSlot), computeEpochAtSlot(parentBlock.slot), parentBlock);
|
|
616
|
+
}
|
|
617
|
+
catch {
|
|
618
|
+
return null;
|
|
619
|
+
}
|
|
620
|
+
})();
|
|
621
|
+
const pref = dependentRootHex !== null ? chain.proposerPreferencesPool.get(prepareSlot, dependentRootHex) : null;
|
|
622
|
+
if (pref !== null) {
|
|
623
|
+
return pref.message.targetGasLimit;
|
|
624
|
+
}
|
|
625
|
+
const parentPayloadVariant = chain.forkChoice.getBlockHexAndBlockHash(parentBlockRootHex, toRootHex(parentBlockHash));
|
|
626
|
+
if (parentPayloadVariant === null || parentPayloadVariant.executionPayloadBlockHash === null) {
|
|
627
|
+
throw new Error(`Cannot resolve parent payload gas_limit for proposer targetGasLimit fallback parentBlockRoot=${parentBlockRootHex} parentBlockHash=${toRootHex(parentBlockHash)}`);
|
|
628
|
+
}
|
|
629
|
+
return parentPayloadVariant.executionPayloadGasLimit;
|
|
630
|
+
}
|
|
542
631
|
export async function produceCommonBlockBody(blockType, currentState, { randaoReveal, graffiti, slot, parentBlock }) {
|
|
543
632
|
const stepsMetrics = blockType === BlockType.Full
|
|
544
633
|
? this.metrics?.executionBlockProductionTimeSteps
|