@lodestar/beacon-node 1.44.0-rc.1 → 1.44.0-rc.2
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 +23 -28
- 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 +0 -25
- 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 +0 -20
- 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 +3 -2
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts.map +1 -1
- package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js +2 -2
- package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js.map +1 -1
- package/lib/chain/errors/executionPayloadBid.d.ts +6 -0
- package/lib/chain/errors/executionPayloadBid.d.ts.map +1 -1
- package/lib/chain/errors/executionPayloadBid.js +1 -0
- package/lib/chain/errors/executionPayloadBid.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/validation/executionPayloadBid.js +12 -1
- package/lib/chain/validation/executionPayloadBid.js.map +1 -1
- package/lib/network/gossip/topic.d.ts +20 -767
- package/lib/network/gossip/topic.d.ts.map +1 -1
- package/lib/network/reqresp/utils/dataColumnResponseValidation.d.ts.map +1 -1
- package/lib/network/reqresp/utils/dataColumnResponseValidation.js +1 -2
- package/lib/network/reqresp/utils/dataColumnResponseValidation.js.map +1 -1
- package/lib/util/sszBytes.js +1 -1
- package/package.json +14 -14
- package/src/api/impl/beacon/blocks/index.ts +27 -37
- package/src/api/impl/beacon/pool/index.ts +1 -41
- package/src/api/impl/validator/index.ts +0 -31
- package/src/chain/blocks/importBlock.ts +7 -5
- package/src/chain/blocks/verifyExecutionPayloadEnvelope.ts +2 -4
- package/src/chain/errors/executionPayloadBid.ts +7 -0
- package/src/chain/produceBlock/produceBlockBody.ts +1 -1
- package/src/chain/validation/executionPayloadBid.ts +13 -1
- package/src/network/reqresp/utils/dataColumnResponseValidation.ts +1 -2
- package/src/util/sszBytes.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"topic.d.ts","sourceRoot":"","sources":["../../../src/network/gossip/topic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAEL,QAAQ,EAMT,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAC,WAAW,EAAE,iBAAiB,EAAmB,MAAM,iBAAiB,CAAC;AAEjF,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAiB,WAAW,EAAE,kBAAkB,EAAE,UAAU,EAAE,oBAAoB,EAAC,MAAM,gBAAgB,CAAC;AAEjH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAAC;CACzC;AAED,qBAAa,gBAAiB,YAAW,iBAAiB;IAG5C,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAF9C,OAAO,CAAC,gBAAgB,CAA4C;IAEpE,YAA6B,iBAAiB,EAAE,iBAAiB,EAAI;IAErE,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAQtC;IAED,8DAA8D;IAC9D,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAEvD;IAED,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAInD;CACF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,CAKrG;AA+BD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW
|
|
1
|
+
{"version":3,"file":"topic.d.ts","sourceRoot":"","sources":["../../../src/network/gossip/topic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAEL,QAAQ,EAMT,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAC,WAAW,EAAE,iBAAiB,EAAmB,MAAM,iBAAiB,CAAC;AAEjF,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAiB,WAAW,EAAE,kBAAkB,EAAE,UAAU,EAAE,oBAAoB,EAAC,MAAM,gBAAgB,CAAC;AAEjH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAAC;CACzC;AAED,qBAAa,gBAAiB,YAAW,iBAAiB;IAG5C,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAF9C,OAAO,CAAC,gBAAgB,CAA4C;IAEpE,YAA6B,iBAAiB,EAAE,iBAAiB,EAAI;IAErE,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAQtC;IAED,8DAA8D;IAC9D,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAEvD;IAED,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAInD;CACF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,CAKrG;AA+BD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2ClD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,cAAc,EAAE,UAAU,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAOnH;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,GAAG,WAAW,CAMjG;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,GAAG,iBAAiB,CAS7G;AAMD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,CA0D9G;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE;IAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAAC,wBAAwB,CAAC,EAAE,OAAO,CAAA;CAAC,GACxE,kBAAkB,CAAC,MAAM,kBAAkB,CAAC,EAAE,CA4DhD;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,aAAa,EAAE,aAAa,GAC3B,kBAAkB,CAAC,MAAM,kBAAkB,CAAC,EAAE,CAShD;AAgBD,eAAO,MAAM,sCAAsC,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,CAkB9E,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataColumnResponseValidation.d.ts","sourceRoot":"","sources":["../../../../src/network/reqresp/utils/dataColumnResponseValidation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dataColumnResponseValidation.d.ts","sourceRoot":"","sources":["../../../../src/network/reqresp/utils/dataColumnResponseValidation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,WAAW,EAAE,IAAI,EAAC,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAAC,YAAY,EAAC,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAC,SAAS,EAAC,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAC,OAAO,EAAC,MAAM,6BAA6B,CAAC;AAGpD,wBAAsB,iCAAiC,CAAC,EACtD,KAAK,EACL,EAAE,EACF,OAAO,EACP,wBAAwB,EACxB,gBAAgB,EAChB,gBAAgB,EAChB,IAAI,EACJ,SAAS,EACV,EAAE;IACD,KAAK,EAAE,YAAY,CAAC;IACpB,EAAE,EAAE,SAAS,CAAC;IACd,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,wBAAwB,EAAE,WAAW,EAAE,CAAC;IACxC,gBAAgB,EAAE,WAAW,EAAE,CAAC;IAChC,gBAAgB,EAAE,WAAW,EAAE,CAAC;CACjC,GAAG,OAAO,CAAC,IAAI,CAAC,CA8ChB;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CAwChH"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { ForkSeq } from "@lodestar/params";
|
|
2
|
-
import { RespStatus, ResponseError } from "@lodestar/reqresp";
|
|
3
2
|
import { prettyBytes, prettyPrintIndices, toRootHex } from "@lodestar/utils";
|
|
4
3
|
import { getBlobKzgCommitmentsCountFromSignedBeaconBlockSerialized } from "../../../util/sszBytes.js";
|
|
5
4
|
export async function handleColumnSidecarUnavailability({ chain, db, metrics, unavailableColumnIndices, requestedColumns, availableColumns, slot, blockRoot, }) {
|
|
@@ -44,7 +43,7 @@ export async function handleColumnSidecarUnavailability({ chain, db, metrics, un
|
|
|
44
43
|
}
|
|
45
44
|
export function validateRequestedDataColumns(chain, requestedColumns) {
|
|
46
45
|
if (requestedColumns.length === 0) {
|
|
47
|
-
|
|
46
|
+
return [];
|
|
48
47
|
}
|
|
49
48
|
const { custodyColumns, custodyColumnsIndex } = chain.custodyConfig;
|
|
50
49
|
const availableColumns = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataColumnResponseValidation.js","sourceRoot":"","sources":["../../../../src/network/reqresp/utils/dataColumnResponseValidation.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"dataColumnResponseValidation.js","sourceRoot":"","sources":["../../../../src/network/reqresp/utils/dataColumnResponseValidation.ts"],"names":[],"mappings":"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"}
|
package/lib/util/sszBytes.js
CHANGED
|
@@ -549,7 +549,7 @@ export function getBlockRootFromPayloadAttestationMessageSerialized(data) {
|
|
|
549
549
|
* blockHash: Bytes32 (32 bytes)
|
|
550
550
|
* prevRandao: Bytes32 (32 bytes)
|
|
551
551
|
* feeRecipient: ExecutionAddress(20 bytes)
|
|
552
|
-
* gasLimit:
|
|
552
|
+
* gasLimit: UintNum64 (8 bytes)
|
|
553
553
|
* builderIndex: BuilderIndex (8 bytes)
|
|
554
554
|
* slot: Slot (8 bytes) ← absolute offset 264
|
|
555
555
|
*/
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"bugs": {
|
|
12
12
|
"url": "https://github.com/ChainSafe/lodestar/issues"
|
|
13
13
|
},
|
|
14
|
-
"version": "1.44.0-rc.
|
|
14
|
+
"version": "1.44.0-rc.2",
|
|
15
15
|
"type": "module",
|
|
16
16
|
"exports": {
|
|
17
17
|
".": {
|
|
@@ -134,17 +134,17 @@
|
|
|
134
134
|
"@libp2p/peer-id": "^6.0.4",
|
|
135
135
|
"@libp2p/prometheus-metrics": "^5.0.14",
|
|
136
136
|
"@libp2p/tcp": "^11.0.13",
|
|
137
|
-
"@lodestar/api": "^1.44.0-rc.
|
|
138
|
-
"@lodestar/config": "^1.44.0-rc.
|
|
139
|
-
"@lodestar/db": "^1.44.0-rc.
|
|
140
|
-
"@lodestar/fork-choice": "^1.44.0-rc.
|
|
141
|
-
"@lodestar/logger": "^1.44.0-rc.
|
|
142
|
-
"@lodestar/params": "^1.44.0-rc.
|
|
143
|
-
"@lodestar/reqresp": "^1.44.0-rc.
|
|
144
|
-
"@lodestar/state-transition": "^1.44.0-rc.
|
|
145
|
-
"@lodestar/types": "^1.44.0-rc.
|
|
146
|
-
"@lodestar/utils": "^1.44.0-rc.
|
|
147
|
-
"@lodestar/validator": "^1.44.0-rc.
|
|
137
|
+
"@lodestar/api": "^1.44.0-rc.2",
|
|
138
|
+
"@lodestar/config": "^1.44.0-rc.2",
|
|
139
|
+
"@lodestar/db": "^1.44.0-rc.2",
|
|
140
|
+
"@lodestar/fork-choice": "^1.44.0-rc.2",
|
|
141
|
+
"@lodestar/logger": "^1.44.0-rc.2",
|
|
142
|
+
"@lodestar/params": "^1.44.0-rc.2",
|
|
143
|
+
"@lodestar/reqresp": "^1.44.0-rc.2",
|
|
144
|
+
"@lodestar/state-transition": "^1.44.0-rc.2",
|
|
145
|
+
"@lodestar/types": "^1.44.0-rc.2",
|
|
146
|
+
"@lodestar/utils": "^1.44.0-rc.2",
|
|
147
|
+
"@lodestar/validator": "^1.44.0-rc.2",
|
|
148
148
|
"@multiformats/multiaddr": "^13.0.1",
|
|
149
149
|
"datastore-core": "^11.0.2",
|
|
150
150
|
"datastore-fs": "^11.0.2",
|
|
@@ -167,7 +167,7 @@
|
|
|
167
167
|
"@libp2p/interface-internal": "^3.0.13",
|
|
168
168
|
"@libp2p/logger": "^6.2.2",
|
|
169
169
|
"@libp2p/utils": "^7.0.13",
|
|
170
|
-
"@lodestar/spec-test-util": "^1.44.0-rc.
|
|
170
|
+
"@lodestar/spec-test-util": "^1.44.0-rc.2",
|
|
171
171
|
"@types/js-yaml": "^4.0.5",
|
|
172
172
|
"@types/qs": "^6.9.7",
|
|
173
173
|
"@types/tmp": "^0.2.3",
|
|
@@ -184,5 +184,5 @@
|
|
|
184
184
|
"beacon",
|
|
185
185
|
"blockchain"
|
|
186
186
|
],
|
|
187
|
-
"gitHead": "
|
|
187
|
+
"gitHead": "fd39bbc0591f363398808776aab3192c03d782d9"
|
|
188
188
|
}
|
|
@@ -11,7 +11,6 @@ import {
|
|
|
11
11
|
SLOTS_PER_HISTORICAL_ROOT,
|
|
12
12
|
isForkPostBellatrix,
|
|
13
13
|
isForkPostDeneb,
|
|
14
|
-
isForkPostElectra,
|
|
15
14
|
isForkPostFulu,
|
|
16
15
|
isForkPostGloas,
|
|
17
16
|
} from "@lodestar/params";
|
|
@@ -94,7 +93,7 @@ export function getBeaconBlockApi({
|
|
|
94
93
|
ApiModules,
|
|
95
94
|
"chain" | "config" | "metrics" | "network" | "db"
|
|
96
95
|
>): ApplicationMethods<routes.beacon.block.Endpoints> {
|
|
97
|
-
const
|
|
96
|
+
const publishBlockV2: ApplicationMethods<routes.beacon.block.Endpoints>["publishBlockV2"] = async (
|
|
98
97
|
{signedBlockContents, broadcastValidation},
|
|
99
98
|
_context,
|
|
100
99
|
opts: PublishBlockOpts = {}
|
|
@@ -406,8 +405,8 @@ export function getBeaconBlockApi({
|
|
|
406
405
|
}
|
|
407
406
|
};
|
|
408
407
|
|
|
409
|
-
const
|
|
410
|
-
{signedBlindedBlock},
|
|
408
|
+
const publishBlindedBlockV2: ApplicationMethods<routes.beacon.block.Endpoints>["publishBlindedBlockV2"] = async (
|
|
409
|
+
{signedBlindedBlock, broadcastValidation},
|
|
411
410
|
context,
|
|
412
411
|
opts: PublishBlockOpts = {}
|
|
413
412
|
) => {
|
|
@@ -437,7 +436,7 @@ export function getBeaconBlockApi({
|
|
|
437
436
|
);
|
|
438
437
|
|
|
439
438
|
chain.logger.info("Publishing assembled block", {slot, blockRoot, source});
|
|
440
|
-
return
|
|
439
|
+
return publishBlockV2({signedBlockContents, broadcastValidation}, {...context, sszBytes: null}, opts);
|
|
441
440
|
}
|
|
442
441
|
|
|
443
442
|
const source = ProducedBlockSource.builder;
|
|
@@ -463,7 +462,11 @@ export function getBeaconBlockApi({
|
|
|
463
462
|
//
|
|
464
463
|
// see: https://github.com/ChainSafe/lodestar/issues/5404
|
|
465
464
|
chain.logger.info("Publishing assembled block", {slot, blockRoot, source});
|
|
466
|
-
return
|
|
465
|
+
return publishBlockV2(
|
|
466
|
+
{signedBlockContents, broadcastValidation},
|
|
467
|
+
{...context, sszBytes: null},
|
|
468
|
+
{...opts, ignoreIfKnown: true}
|
|
469
|
+
);
|
|
467
470
|
}
|
|
468
471
|
};
|
|
469
472
|
|
|
@@ -598,23 +601,6 @@ export function getBeaconBlockApi({
|
|
|
598
601
|
};
|
|
599
602
|
},
|
|
600
603
|
|
|
601
|
-
async getBlockAttestations({blockId}) {
|
|
602
|
-
const {block, executionOptimistic, finalized} = await getBlockResponse(chain, blockId);
|
|
603
|
-
const fork = config.getForkName(block.message.slot);
|
|
604
|
-
|
|
605
|
-
if (isForkPostElectra(fork)) {
|
|
606
|
-
throw new ApiError(
|
|
607
|
-
400,
|
|
608
|
-
`Use getBlockAttestationsV2 to retrieve block attestations for post-electra fork=${fork}`
|
|
609
|
-
);
|
|
610
|
-
}
|
|
611
|
-
|
|
612
|
-
return {
|
|
613
|
-
data: block.message.body.attestations,
|
|
614
|
-
meta: {executionOptimistic, finalized},
|
|
615
|
-
};
|
|
616
|
-
},
|
|
617
|
-
|
|
618
604
|
async getBlockAttestationsV2({blockId}) {
|
|
619
605
|
const {block, executionOptimistic, finalized} = await getBlockResponse(chain, blockId);
|
|
620
606
|
return {
|
|
@@ -662,16 +648,8 @@ export function getBeaconBlockApi({
|
|
|
662
648
|
};
|
|
663
649
|
},
|
|
664
650
|
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
async publishBlindedBlockV2(args, context, opts) {
|
|
669
|
-
await publishBlindedBlock(args, context, opts);
|
|
670
|
-
},
|
|
671
|
-
|
|
672
|
-
async publishBlockV2(args, context, opts) {
|
|
673
|
-
await publishBlock(args, context, opts);
|
|
674
|
-
},
|
|
651
|
+
publishBlockV2,
|
|
652
|
+
publishBlindedBlockV2,
|
|
675
653
|
|
|
676
654
|
async publishExecutionPayloadEnvelope({signedExecutionPayloadEnvelope}) {
|
|
677
655
|
const seenTimestampSec = Date.now() / 1000;
|
|
@@ -686,9 +664,20 @@ export function getBeaconBlockApi({
|
|
|
686
664
|
}
|
|
687
665
|
|
|
688
666
|
// TODO GLOAS: review checks, do we want to implement `broadcast_validation`?
|
|
689
|
-
|
|
667
|
+
let block = chain.forkChoice.getBlockHex(blockRootHex, PayloadStatus.EMPTY);
|
|
690
668
|
if (block === null) {
|
|
691
|
-
|
|
669
|
+
// Only wait if the envelope is for the current slot
|
|
670
|
+
if (chain.clock.isCurrentSlotGivenGossipDisparity(slot)) {
|
|
671
|
+
chain.logger.debug("Execution payload envelope received before block, waiting for block to be imported", {
|
|
672
|
+
blockRoot: blockRootHex,
|
|
673
|
+
slot,
|
|
674
|
+
});
|
|
675
|
+
await chain.waitForBlock(slot, blockRootHex);
|
|
676
|
+
block = chain.forkChoice.getBlockHex(blockRootHex, PayloadStatus.EMPTY);
|
|
677
|
+
}
|
|
678
|
+
if (block === null) {
|
|
679
|
+
throw new ApiError(404, `Block not found for beacon block root ${blockRootHex}`);
|
|
680
|
+
}
|
|
692
681
|
}
|
|
693
682
|
if (block.slot !== slot) {
|
|
694
683
|
throw new ApiError(400, `Envelope slot ${slot} does not match block slot ${block.slot}`);
|
|
@@ -735,10 +724,11 @@ export function getBeaconBlockApi({
|
|
|
735
724
|
await sleep(msToBlockSlot);
|
|
736
725
|
}
|
|
737
726
|
|
|
738
|
-
// TODO GLOAS: if block and payload are submitted in parallel, payloadInput may not yet exist.
|
|
739
|
-
// A queuing mechanism is needed to handle this case. See https://github.com/ChainSafe/lodestar/issues/8915
|
|
740
727
|
const payloadInput = chain.seenPayloadEnvelopeInputCache.get(blockRootHex);
|
|
741
728
|
if (!payloadInput) {
|
|
729
|
+
// The block is awaited above (queuing if the envelope arrived first), and both the API and
|
|
730
|
+
// gossip import paths seed the PayloadEnvelopeInput before importing the block, so the input
|
|
731
|
+
// should exist here.
|
|
742
732
|
throw new ApiError(404, `PayloadEnvelopeInput not found for block root ${blockRootHex}`);
|
|
743
733
|
}
|
|
744
734
|
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
isForkPostGloas,
|
|
10
10
|
} from "@lodestar/params";
|
|
11
11
|
import {isStatePostAltair} from "@lodestar/state-transition";
|
|
12
|
-
import {
|
|
12
|
+
import {Epoch, SingleAttestation, isElectraAttestation, ssz, sszTypesFor} from "@lodestar/types";
|
|
13
13
|
import {toRootHex} from "@lodestar/utils";
|
|
14
14
|
import {
|
|
15
15
|
AttestationError,
|
|
@@ -40,25 +40,6 @@ export function getBeaconPoolApi({
|
|
|
40
40
|
network,
|
|
41
41
|
}: Pick<ApiModules, "chain" | "logger" | "metrics" | "network">): ApplicationMethods<routes.beacon.pool.Endpoints> {
|
|
42
42
|
return {
|
|
43
|
-
async getPoolAttestations({slot, committeeIndex}) {
|
|
44
|
-
// Already filtered by slot
|
|
45
|
-
let attestations: Attestation[] = chain.aggregatedAttestationPool.getAll(slot);
|
|
46
|
-
const fork = chain.config.getForkName(slot ?? chain.clock.currentSlot);
|
|
47
|
-
|
|
48
|
-
if (isForkPostElectra(fork)) {
|
|
49
|
-
throw new ApiError(
|
|
50
|
-
400,
|
|
51
|
-
`Use getPoolAttestationsV2 to retrieve pool attestations for post-electra fork=${fork}`
|
|
52
|
-
);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
if (committeeIndex !== undefined) {
|
|
56
|
-
attestations = attestations.filter((attestation) => committeeIndex === attestation.data.index);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
return {data: attestations};
|
|
60
|
-
},
|
|
61
|
-
|
|
62
43
|
async getPoolAttestationsV2({slot, committeeIndex}) {
|
|
63
44
|
// Already filtered by slot
|
|
64
45
|
let attestations = chain.aggregatedAttestationPool.getAll(slot);
|
|
@@ -134,19 +115,6 @@ export function getBeaconPoolApi({
|
|
|
134
115
|
}
|
|
135
116
|
},
|
|
136
117
|
|
|
137
|
-
async getPoolAttesterSlashings() {
|
|
138
|
-
const fork = chain.config.getForkName(chain.clock.currentSlot);
|
|
139
|
-
|
|
140
|
-
if (isForkPostElectra(fork)) {
|
|
141
|
-
throw new ApiError(
|
|
142
|
-
400,
|
|
143
|
-
`Use getPoolAttesterSlashingsV2 to retrieve pool attester slashings for post-electra fork=${fork}`
|
|
144
|
-
);
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
return {data: chain.opPool.getAllAttesterSlashings()};
|
|
148
|
-
},
|
|
149
|
-
|
|
150
118
|
async getPoolAttesterSlashingsV2() {
|
|
151
119
|
const fork = chain.config.getForkName(chain.clock.currentSlot);
|
|
152
120
|
return {data: chain.opPool.getAllAttesterSlashings(), meta: {version: fork}};
|
|
@@ -164,10 +132,6 @@ export function getBeaconPoolApi({
|
|
|
164
132
|
return {data: chain.opPool.getAllBlsToExecutionChanges().map(({data}) => data)};
|
|
165
133
|
},
|
|
166
134
|
|
|
167
|
-
async submitPoolAttestations({signedAttestations}) {
|
|
168
|
-
await this.submitPoolAttestationsV2({signedAttestations});
|
|
169
|
-
},
|
|
170
|
-
|
|
171
135
|
async submitPoolAttestationsV2({signedAttestations}) {
|
|
172
136
|
const fork = chain.config.getForkName(chain.clock.currentSlot);
|
|
173
137
|
const seenTimestampSec = Date.now() / 1000;
|
|
@@ -247,10 +211,6 @@ export function getBeaconPoolApi({
|
|
|
247
211
|
}
|
|
248
212
|
},
|
|
249
213
|
|
|
250
|
-
async submitPoolAttesterSlashings({attesterSlashing}) {
|
|
251
|
-
await this.submitPoolAttesterSlashingsV2({attesterSlashing});
|
|
252
|
-
},
|
|
253
|
-
|
|
254
214
|
async submitPoolAttesterSlashingsV2({attesterSlashing}) {
|
|
255
215
|
await validateApiAttesterSlashing(chain, attesterSlashing);
|
|
256
216
|
const fork = chain.config.getForkName(Number(attesterSlashing.attestation1.data.slot));
|
|
@@ -1501,33 +1501,6 @@ export function getValidatorApi(
|
|
|
1501
1501
|
};
|
|
1502
1502
|
},
|
|
1503
1503
|
|
|
1504
|
-
async getAggregatedAttestation({attestationDataRoot, slot}) {
|
|
1505
|
-
notWhileSyncing();
|
|
1506
|
-
|
|
1507
|
-
await waitForSlot(slot); // Must never request for a future slot > currentSlot
|
|
1508
|
-
|
|
1509
|
-
const dataRootHex = toRootHex(attestationDataRoot);
|
|
1510
|
-
const aggregate = chain.attestationPool.getAggregate(slot, dataRootHex, null);
|
|
1511
|
-
const fork = chain.config.getForkName(slot);
|
|
1512
|
-
|
|
1513
|
-
if (isForkPostElectra(fork)) {
|
|
1514
|
-
throw new ApiError(
|
|
1515
|
-
400,
|
|
1516
|
-
`Use getAggregatedAttestationV2 to retrieve aggregated attestations for post-electra fork=${fork}`
|
|
1517
|
-
);
|
|
1518
|
-
}
|
|
1519
|
-
|
|
1520
|
-
if (!aggregate) {
|
|
1521
|
-
throw new ApiError(404, `No aggregated attestation for slot=${slot}, dataRoot=${dataRootHex}`);
|
|
1522
|
-
}
|
|
1523
|
-
|
|
1524
|
-
metrics?.production.producedAggregateParticipants.observe(aggregate.aggregationBits.getTrueBitIndexes().length);
|
|
1525
|
-
|
|
1526
|
-
return {
|
|
1527
|
-
data: aggregate,
|
|
1528
|
-
};
|
|
1529
|
-
},
|
|
1530
|
-
|
|
1531
1504
|
async getAggregatedAttestationV2({attestationDataRoot, slot, committeeIndex}) {
|
|
1532
1505
|
notWhileSyncing();
|
|
1533
1506
|
|
|
@@ -1551,10 +1524,6 @@ export function getValidatorApi(
|
|
|
1551
1524
|
};
|
|
1552
1525
|
},
|
|
1553
1526
|
|
|
1554
|
-
async publishAggregateAndProofs({signedAggregateAndProofs}) {
|
|
1555
|
-
await this.publishAggregateAndProofsV2({signedAggregateAndProofs});
|
|
1556
|
-
},
|
|
1557
|
-
|
|
1558
1527
|
async publishAggregateAndProofsV2({signedAggregateAndProofs}) {
|
|
1559
1528
|
notWhileSyncing();
|
|
1560
1529
|
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
} from "@lodestar/state-transition";
|
|
23
23
|
import {Attestation, BeaconBlock, altair, capella, electra, isGloasBeaconBlock, phase0, ssz} from "@lodestar/types";
|
|
24
24
|
import {isErrorAborted, toRootHex} from "@lodestar/utils";
|
|
25
|
-
import {ZERO_HASH_HEX} from "../../constants/index.js";
|
|
25
|
+
import {GENESIS_SLOT, ZERO_HASH_HEX} from "../../constants/index.js";
|
|
26
26
|
import {callInNextEventLoop} from "../../util/eventLoop.js";
|
|
27
27
|
import {isOptimisticBlock} from "../../util/forkChoice.js";
|
|
28
28
|
import {isQueueErrorAborted} from "../../util/queue/index.js";
|
|
@@ -189,10 +189,12 @@ export async function importBlock(
|
|
|
189
189
|
this.seenBlockAttesters.addIndices(blockEpoch, indexedAttestation.attestingIndices);
|
|
190
190
|
|
|
191
191
|
const correctHead = ssz.Root.equals(rootCache.getBlockRootAtSlot(attestation.data.slot), beaconBlockRoot);
|
|
192
|
-
const missedSlotVote =
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
192
|
+
const missedSlotVote =
|
|
193
|
+
attestation.data.slot > GENESIS_SLOT &&
|
|
194
|
+
ssz.Root.equals(
|
|
195
|
+
rootCache.getBlockRootAtSlot(attestation.data.slot - 1),
|
|
196
|
+
rootCache.getBlockRootAtSlot(attestation.data.slot)
|
|
197
|
+
);
|
|
196
198
|
this.validatorMonitor?.registerAttestationInBlock(
|
|
197
199
|
indexedAttestation,
|
|
198
200
|
parentBlockSlot,
|
|
@@ -61,10 +61,8 @@ export function verifyExecutionPayloadEnvelope(
|
|
|
61
61
|
`Prev randao mismatch between bid and payload bid=${toHex(bid.prevRandao)} payload=${toHex(payload.prevRandao)}`
|
|
62
62
|
);
|
|
63
63
|
}
|
|
64
|
-
if (
|
|
65
|
-
throw new Error(
|
|
66
|
-
`Gas limit mismatch between payload and bid payload=${payload.gasLimit} bid=${Number(bid.gasLimit)}`
|
|
67
|
-
);
|
|
64
|
+
if (bid.gasLimit !== payload.gasLimit) {
|
|
65
|
+
throw new Error(`Gas limit mismatch between payload and bid payload=${payload.gasLimit} bid=${bid.gasLimit}`);
|
|
68
66
|
}
|
|
69
67
|
if (!byteArrayEquals(bid.blockHash, payload.blockHash)) {
|
|
70
68
|
throw new Error(
|
|
@@ -12,6 +12,7 @@ export enum ExecutionPayloadBidErrorCode {
|
|
|
12
12
|
UNKNOWN_PARENT_BLOCK_HASH = "EXECUTION_PAYLOAD_BID_ERROR_UNKNOWN_PARENT_BLOCK_HASH",
|
|
13
13
|
INVALID_SLOT = "EXECUTION_PAYLOAD_BID_ERROR_INVALID_SLOT",
|
|
14
14
|
NOT_LATER_THAN_PARENT = "EXECUTION_PAYLOAD_BID_ERROR_NOT_LATER_THAN_PARENT",
|
|
15
|
+
INVALID_PREV_RANDAO = "EXECUTION_PAYLOAD_BID_ERROR_INVALID_PREV_RANDAO",
|
|
15
16
|
INVALID_SIGNATURE = "EXECUTION_PAYLOAD_BID_ERROR_INVALID_SIGNATURE",
|
|
16
17
|
NO_MATCHING_PROPOSER_PREFERENCES = "EXECUTION_PAYLOAD_BID_ERROR_NO_MATCHING_PROPOSER_PREFERENCES",
|
|
17
18
|
PROPOSER_PREFERENCES_FEE_RECIPIENT_MISMATCH = "EXECUTION_PAYLOAD_BID_ERROR_PROPOSER_PREFERENCES_FEE_RECIPIENT_MISMATCH",
|
|
@@ -43,6 +44,12 @@ export type ExecutionPayloadBidErrorType =
|
|
|
43
44
|
| {code: ExecutionPayloadBidErrorCode.UNKNOWN_PARENT_BLOCK_HASH; parentBlockHash: RootHex}
|
|
44
45
|
| {code: ExecutionPayloadBidErrorCode.INVALID_SLOT; builderIndex: BuilderIndex; slot: Slot}
|
|
45
46
|
| {code: ExecutionPayloadBidErrorCode.NOT_LATER_THAN_PARENT; parentSlot: Slot; slot: Slot}
|
|
47
|
+
| {
|
|
48
|
+
code: ExecutionPayloadBidErrorCode.INVALID_PREV_RANDAO;
|
|
49
|
+
builderIndex: BuilderIndex;
|
|
50
|
+
bidPrevRandao: string;
|
|
51
|
+
expectedPrevRandao: string;
|
|
52
|
+
}
|
|
46
53
|
| {code: ExecutionPayloadBidErrorCode.INVALID_SIGNATURE; builderIndex: BuilderIndex; slot: Slot}
|
|
47
54
|
| {
|
|
48
55
|
code: ExecutionPayloadBidErrorCode.NO_MATCHING_PROPOSER_PREFERENCES;
|
|
@@ -344,7 +344,7 @@ export async function produceBlockBody<T extends BlockType>(
|
|
|
344
344
|
blockHash: executionPayload.blockHash,
|
|
345
345
|
prevRandao: currentState.getRandaoMix(currentState.epoch),
|
|
346
346
|
feeRecipient: executionPayload.feeRecipient,
|
|
347
|
-
gasLimit:
|
|
347
|
+
gasLimit: executionPayload.gasLimit,
|
|
348
348
|
builderIndex: BUILDER_INDEX_SELF_BUILD,
|
|
349
349
|
slot: blockSlot,
|
|
350
350
|
value: 0,
|
|
@@ -175,7 +175,7 @@ async function validateExecutionPayloadBid(
|
|
|
175
175
|
// [IGNORE] `is_gas_limit_target_compatible(parent_gas_limit, bid.gas_limit, target_gas_limit)`,
|
|
176
176
|
// where `parent_gas_limit` is the `gas_limit` of the parent execution payload and
|
|
177
177
|
// `target_gas_limit` is `proposer_preferences.target_gas_limit`.
|
|
178
|
-
const bidGasLimit =
|
|
178
|
+
const bidGasLimit = bid.gasLimit;
|
|
179
179
|
const parentGasLimit = parentPayloadVariant.executionPayloadGasLimit;
|
|
180
180
|
const targetGasLimit = proposerPreferences.message.targetGasLimit;
|
|
181
181
|
if (!isGasLimitTargetCompatible(parentGasLimit, bidGasLimit, targetGasLimit)) {
|
|
@@ -232,6 +232,18 @@ async function validateExecutionPayloadBid(
|
|
|
232
232
|
});
|
|
233
233
|
}
|
|
234
234
|
|
|
235
|
+
// [REJECT] `bid.prev_randao` is the correct RANDAO mix -- i.e. validate that
|
|
236
|
+
// `bid.prev_randao == get_randao_mix(parent_state, get_current_epoch(parent_state))`.
|
|
237
|
+
const randaoMix = state.getRandaoMix(computeEpochAtSlot(state.slot));
|
|
238
|
+
if (!byteArrayEquals(bid.prevRandao, randaoMix)) {
|
|
239
|
+
throw new ExecutionPayloadBidError(GossipAction.REJECT, {
|
|
240
|
+
code: ExecutionPayloadBidErrorCode.INVALID_PREV_RANDAO,
|
|
241
|
+
builderIndex: bid.builderIndex,
|
|
242
|
+
bidPrevRandao: toHex(bid.prevRandao),
|
|
243
|
+
expectedPrevRandao: toHex(randaoMix),
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
|
|
235
247
|
// [REJECT] `signed_execution_payload_bid.signature` is valid with respect to the `bid.builder_index`.
|
|
236
248
|
const signatureSet = createSingleSignatureSetFromComponents(
|
|
237
249
|
PublicKey.fromBytes(builder.pubkey),
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import {LogData} from "@lodestar/logger";
|
|
2
2
|
import {ForkSeq} from "@lodestar/params";
|
|
3
|
-
import {RespStatus, ResponseError} from "@lodestar/reqresp";
|
|
4
3
|
import {ColumnIndex, Slot} from "@lodestar/types";
|
|
5
4
|
import {prettyBytes, prettyPrintIndices, toRootHex} from "@lodestar/utils";
|
|
6
5
|
import {IBeaconChain} from "../../../chain/interface.js";
|
|
@@ -76,7 +75,7 @@ export async function handleColumnSidecarUnavailability({
|
|
|
76
75
|
|
|
77
76
|
export function validateRequestedDataColumns(chain: IBeaconChain, requestedColumns: ColumnIndex[]): ColumnIndex[] {
|
|
78
77
|
if (requestedColumns.length === 0) {
|
|
79
|
-
|
|
78
|
+
return [];
|
|
80
79
|
}
|
|
81
80
|
|
|
82
81
|
const {custodyColumns, custodyColumnsIndex} = chain.custodyConfig;
|
package/src/util/sszBytes.ts
CHANGED
|
@@ -706,7 +706,7 @@ export function getBlockRootFromPayloadAttestationMessageSerialized(data: Uint8A
|
|
|
706
706
|
* blockHash: Bytes32 (32 bytes)
|
|
707
707
|
* prevRandao: Bytes32 (32 bytes)
|
|
708
708
|
* feeRecipient: ExecutionAddress(20 bytes)
|
|
709
|
-
* gasLimit:
|
|
709
|
+
* gasLimit: UintNum64 (8 bytes)
|
|
710
710
|
* builderIndex: BuilderIndex (8 bytes)
|
|
711
711
|
* slot: Slot (8 bytes) ← absolute offset 264
|
|
712
712
|
*/
|