@lodestar/beacon-node 1.35.0-dev.792fcea33a → 1.35.0-dev.7a240d3631
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 +56 -12
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/config/constants.d.ts +9 -9
- package/lib/api/impl/config/constants.js +16 -9
- package/lib/api/impl/config/constants.js.map +1 -1
- package/lib/api/impl/validator/index.d.ts.map +1 -1
- package/lib/api/impl/validator/index.js +4 -8
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
- package/lib/chain/blocks/blockInput/blockInput.js +2 -1
- package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
- package/lib/chain/chain.d.ts +1 -1
- package/lib/chain/chain.d.ts.map +1 -1
- package/lib/chain/chain.js +1 -2
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/lightClient/index.d.ts +2 -2
- package/lib/chain/lightClient/index.d.ts.map +1 -1
- package/lib/chain/lightClient/index.js +2 -0
- package/lib/chain/lightClient/index.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts +1 -4
- package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +13 -4
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.js +8 -1
- package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
- package/lib/network/gossip/topic.js +2 -2
- package/lib/network/gossip/topic.js.map +1 -1
- package/lib/network/peers/datastore.d.ts +2 -2
- package/lib/network/peers/datastore.d.ts.map +1 -1
- package/lib/network/peers/datastore.js +2 -2
- package/lib/network/peers/datastore.js.map +1 -1
- package/lib/network/peers/datastore_bun.d.ts +3 -0
- package/lib/network/peers/datastore_bun.d.ts.map +1 -0
- package/lib/network/peers/datastore_bun.js +3 -0
- package/lib/network/peers/datastore_bun.js.map +1 -0
- package/lib/sync/utils/downloadByRange.d.ts +2 -1
- package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
- package/lib/sync/utils/downloadByRange.js +8 -3
- package/lib/sync/utils/downloadByRange.js.map +1 -1
- package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
- package/lib/sync/utils/downloadByRoot.js +2 -1
- package/lib/sync/utils/downloadByRoot.js.map +1 -1
- package/lib/util/dataColumns.d.ts.map +1 -1
- package/lib/util/dataColumns.js +4 -2
- package/lib/util/dataColumns.js.map +1 -1
- package/package.json +19 -14
- package/src/api/impl/beacon/blocks/index.ts +84 -13
- package/src/api/impl/config/constants.ts +17 -9
- package/src/api/impl/validator/index.ts +4 -11
- package/src/chain/blocks/blockInput/blockInput.ts +5 -3
- package/src/chain/chain.ts +0 -2
- package/src/chain/lightClient/index.ts +11 -3
- package/src/chain/produceBlock/produceBlockBody.ts +16 -14
- package/src/chain/seenCache/seenGossipBlockInput.ts +10 -2
- package/src/network/gossip/topic.ts +2 -2
- package/src/network/peers/datastore.ts +4 -4
- package/src/network/peers/datastore_bun.ts +3 -0
- package/src/sync/utils/downloadByRange.ts +12 -6
- package/src/sync/utils/downloadByRoot.ts +12 -4
- package/src/util/dataColumns.ts +11 -2
package/lib/util/dataColumns.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { digest } from "@chainsafe/as-sha256";
|
|
2
2
|
import { Tree } from "@chainsafe/persistent-merkle-tree";
|
|
3
|
-
import { KZG_COMMITMENTS_GINDEX, NUMBER_OF_COLUMNS } from "@lodestar/params";
|
|
3
|
+
import { KZG_COMMITMENTS_GINDEX, NUMBER_OF_COLUMNS, } from "@lodestar/params";
|
|
4
4
|
import { signedBlockToSignedHeader } from "@lodestar/state-transition";
|
|
5
5
|
import { ssz, } from "@lodestar/types";
|
|
6
6
|
import { bytesToBigInt } from "@lodestar/utils";
|
|
@@ -231,7 +231,9 @@ export function getDataColumnSidecars(signedBlockHeader, kzgCommitments, kzgComm
|
|
|
231
231
|
* https://github.com/ethereum/consensus-specs/blob/v1.6.0-alpha.4/specs/fulu/validator.md#get_data_column_sidecars_from_block
|
|
232
232
|
*/
|
|
233
233
|
export function getDataColumnSidecarsFromBlock(config, signedBlock, cellsAndKzgProofs) {
|
|
234
|
-
|
|
234
|
+
// TODO GLOAS: Need to get blobKzgCommitments from somewhere else
|
|
235
|
+
const blobKzgCommitments = signedBlock.message.body
|
|
236
|
+
.blobKzgCommitments;
|
|
235
237
|
// No need to create data column sidecars if there are no blobs
|
|
236
238
|
if (blobKzgCommitments.length === 0) {
|
|
237
239
|
return [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataColumns.js","sourceRoot":"","sources":["../../src/util/dataColumns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAC,IAAI,EAAC,MAAM,mCAAmC,CAAC;AAEvD,OAAO,
|
|
1
|
+
{"version":3,"file":"dataColumns.js","sourceRoot":"","sources":["../../src/util/dataColumns.ts"],"names":[],"mappings":"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"}
|
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.35.0-dev.
|
|
14
|
+
"version": "1.35.0-dev.7a240d3631",
|
|
15
15
|
"type": "module",
|
|
16
16
|
"exports": {
|
|
17
17
|
".": {
|
|
@@ -67,6 +67,10 @@
|
|
|
67
67
|
"#prometheus-gc-stats-wrapper": {
|
|
68
68
|
"bun": "./src/bun-wrappers/prometheus-gc-stats.ts",
|
|
69
69
|
"default": "@chainsafe/prometheus-gc-stats"
|
|
70
|
+
},
|
|
71
|
+
"#datastore-wrapper": {
|
|
72
|
+
"bun": "./src/network/peers/datastore_bun.ts",
|
|
73
|
+
"default": "datastore-level"
|
|
70
74
|
}
|
|
71
75
|
},
|
|
72
76
|
"typesVersions": {
|
|
@@ -134,21 +138,22 @@
|
|
|
134
138
|
"@libp2p/peer-id": "^5.1.0",
|
|
135
139
|
"@libp2p/prometheus-metrics": "^4.3.15",
|
|
136
140
|
"@libp2p/tcp": "^10.1.8",
|
|
137
|
-
"@lodestar/api": "1.35.0-dev.
|
|
138
|
-
"@lodestar/config": "1.35.0-dev.
|
|
139
|
-
"@lodestar/db": "1.35.0-dev.
|
|
140
|
-
"@lodestar/fork-choice": "1.35.0-dev.
|
|
141
|
-
"@lodestar/light-client": "1.35.0-dev.
|
|
142
|
-
"@lodestar/logger": "1.35.0-dev.
|
|
143
|
-
"@lodestar/params": "1.35.0-dev.
|
|
144
|
-
"@lodestar/reqresp": "1.35.0-dev.
|
|
145
|
-
"@lodestar/state-transition": "1.35.0-dev.
|
|
146
|
-
"@lodestar/types": "1.35.0-dev.
|
|
147
|
-
"@lodestar/utils": "1.35.0-dev.
|
|
148
|
-
"@lodestar/validator": "1.35.0-dev.
|
|
141
|
+
"@lodestar/api": "1.35.0-dev.7a240d3631",
|
|
142
|
+
"@lodestar/config": "1.35.0-dev.7a240d3631",
|
|
143
|
+
"@lodestar/db": "1.35.0-dev.7a240d3631",
|
|
144
|
+
"@lodestar/fork-choice": "1.35.0-dev.7a240d3631",
|
|
145
|
+
"@lodestar/light-client": "1.35.0-dev.7a240d3631",
|
|
146
|
+
"@lodestar/logger": "1.35.0-dev.7a240d3631",
|
|
147
|
+
"@lodestar/params": "1.35.0-dev.7a240d3631",
|
|
148
|
+
"@lodestar/reqresp": "1.35.0-dev.7a240d3631",
|
|
149
|
+
"@lodestar/state-transition": "1.35.0-dev.7a240d3631",
|
|
150
|
+
"@lodestar/types": "1.35.0-dev.7a240d3631",
|
|
151
|
+
"@lodestar/utils": "1.35.0-dev.7a240d3631",
|
|
152
|
+
"@lodestar/validator": "1.35.0-dev.7a240d3631",
|
|
149
153
|
"@multiformats/multiaddr": "^12.1.3",
|
|
150
154
|
"datastore-core": "^10.0.2",
|
|
151
155
|
"datastore-fs": "^10.0.6",
|
|
156
|
+
"datastore-level": "^11.0.3",
|
|
152
157
|
"deepmerge": "^4.3.1",
|
|
153
158
|
"fastify": "^5.2.1",
|
|
154
159
|
"interface-datastore": "^8.3.0",
|
|
@@ -180,5 +185,5 @@
|
|
|
180
185
|
"beacon",
|
|
181
186
|
"blockchain"
|
|
182
187
|
],
|
|
183
|
-
"gitHead": "
|
|
188
|
+
"gitHead": "3865a83107cc3ed44707903e0b6993e880e0eb81"
|
|
184
189
|
}
|
|
@@ -3,18 +3,21 @@ import {ApiError, ApplicationMethods} from "@lodestar/api/server";
|
|
|
3
3
|
import {
|
|
4
4
|
ForkPostBellatrix,
|
|
5
5
|
ForkPostFulu,
|
|
6
|
+
ForkPreGloas,
|
|
6
7
|
NUMBER_OF_COLUMNS,
|
|
7
8
|
SLOTS_PER_HISTORICAL_ROOT,
|
|
8
9
|
isForkPostBellatrix,
|
|
9
10
|
isForkPostDeneb,
|
|
10
11
|
isForkPostElectra,
|
|
11
12
|
isForkPostFulu,
|
|
13
|
+
isForkPostGloas,
|
|
12
14
|
} from "@lodestar/params";
|
|
13
15
|
import {
|
|
14
16
|
computeEpochAtSlot,
|
|
15
17
|
computeTimeAtSlot,
|
|
16
18
|
reconstructSignedBlockContents,
|
|
17
19
|
signedBeaconBlockToBlinded,
|
|
20
|
+
signedBlockToSignedHeader,
|
|
18
21
|
} from "@lodestar/state-transition";
|
|
19
22
|
import {
|
|
20
23
|
ProducedBlockSource,
|
|
@@ -42,7 +45,12 @@ import {
|
|
|
42
45
|
} from "../../../../chain/produceBlock/index.js";
|
|
43
46
|
import {validateGossipBlock} from "../../../../chain/validation/block.js";
|
|
44
47
|
import {OpSource} from "../../../../chain/validatorMonitor.js";
|
|
45
|
-
import {
|
|
48
|
+
import {
|
|
49
|
+
computePreFuluKzgCommitmentsInclusionProof,
|
|
50
|
+
getBlobSidecars,
|
|
51
|
+
kzgCommitmentToVersionedHash,
|
|
52
|
+
reconstructBlobs,
|
|
53
|
+
} from "../../../../util/blobs.js";
|
|
46
54
|
import {getDataColumnSidecarsFromBlock} from "../../../../util/dataColumns.js";
|
|
47
55
|
import {isOptimisticBlock} from "../../../../util/forkChoice.js";
|
|
48
56
|
import {kzg} from "../../../../util/kzg.js";
|
|
@@ -360,6 +368,10 @@ export function getBeaconBlockApi({
|
|
|
360
368
|
);
|
|
361
369
|
const fork = config.getForkName(slot);
|
|
362
370
|
|
|
371
|
+
if (isForkPostGloas(fork)) {
|
|
372
|
+
throw new ApiError(400, `Blinded blocks are not available for post-gloas fork=${fork}`);
|
|
373
|
+
}
|
|
374
|
+
|
|
363
375
|
// Either the payload/blobs are cached from i) engine locally or ii) they are from the builder
|
|
364
376
|
const producedResult = chain.blockProductionCache.get(blockRoot);
|
|
365
377
|
if (producedResult !== undefined && producedResult.type !== BlockType.Blinded) {
|
|
@@ -518,9 +530,12 @@ export function getBeaconBlockApi({
|
|
|
518
530
|
async getBlindedBlock({blockId}) {
|
|
519
531
|
const {block, executionOptimistic, finalized} = await getBlockResponse(chain, blockId);
|
|
520
532
|
const fork = config.getForkName(block.message.slot);
|
|
533
|
+
if (isForkPostGloas(fork)) {
|
|
534
|
+
throw new ApiError(400, `Blinded blocks are not available for post-gloas fork=${fork}`);
|
|
535
|
+
}
|
|
521
536
|
return {
|
|
522
537
|
data: isForkPostBellatrix(fork)
|
|
523
|
-
? signedBeaconBlockToBlinded(config, block as SignedBeaconBlock<ForkPostBellatrix>)
|
|
538
|
+
? signedBeaconBlockToBlinded(config, block as SignedBeaconBlock<ForkPostBellatrix & ForkPreGloas>)
|
|
524
539
|
: block,
|
|
525
540
|
meta: {
|
|
526
541
|
executionOptimistic,
|
|
@@ -610,24 +625,79 @@ export function getBeaconBlockApi({
|
|
|
610
625
|
|
|
611
626
|
const {block, executionOptimistic, finalized} = await getBlockResponse(chain, blockId);
|
|
612
627
|
const fork = config.getForkName(block.message.slot);
|
|
628
|
+
const blockRoot = sszTypesFor(fork).BeaconBlock.hashTreeRoot(block.message);
|
|
629
|
+
|
|
630
|
+
let data: deneb.BlobSidecars;
|
|
613
631
|
|
|
614
632
|
if (isForkPostFulu(fork)) {
|
|
615
|
-
|
|
616
|
-
|
|
633
|
+
const {targetCustodyGroupCount} = chain.custodyConfig;
|
|
634
|
+
if (targetCustodyGroupCount < NUMBER_OF_COLUMNS / 2) {
|
|
635
|
+
throw new ApiError(
|
|
636
|
+
503,
|
|
637
|
+
`Custody group count of ${targetCustodyGroupCount} is not sufficient to serve blob sidecars, must custody at least ${NUMBER_OF_COLUMNS / 2} data columns`
|
|
638
|
+
);
|
|
639
|
+
}
|
|
617
640
|
|
|
618
|
-
|
|
641
|
+
const blobKzgCommitments = (block.message.body as deneb.BeaconBlockBody).blobKzgCommitments;
|
|
642
|
+
const blobCount = blobKzgCommitments.length;
|
|
619
643
|
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
644
|
+
if (blobCount > 0) {
|
|
645
|
+
let dataColumnSidecars = await fromAsync(db.dataColumnSidecar.valuesStream(blockRoot));
|
|
646
|
+
if (dataColumnSidecars.length === 0) {
|
|
647
|
+
dataColumnSidecars = await fromAsync(db.dataColumnSidecarArchive.valuesStream(block.message.slot));
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
if (dataColumnSidecars.length === 0) {
|
|
651
|
+
throw new ApiError(
|
|
652
|
+
404,
|
|
653
|
+
`dataColumnSidecars not found in db for slot=${block.message.slot} root=${toRootHex(blockRoot)} blobs=${blobCount}`
|
|
654
|
+
);
|
|
655
|
+
}
|
|
624
656
|
|
|
625
|
-
|
|
626
|
-
|
|
657
|
+
const blobs = await reconstructBlobs(dataColumnSidecars);
|
|
658
|
+
const signedBlockHeader = signedBlockToSignedHeader(config, block);
|
|
659
|
+
const requestedIndices = indices ?? Array.from({length: blobKzgCommitments.length}, (_, i) => i);
|
|
660
|
+
|
|
661
|
+
data = await Promise.all(
|
|
662
|
+
requestedIndices.map(async (index) => {
|
|
663
|
+
// Reconstruct blob sidecar from blob
|
|
664
|
+
const kzgCommitment = blobKzgCommitments[index];
|
|
665
|
+
if (kzgCommitment === undefined) {
|
|
666
|
+
throw new ApiError(400, `Blob index ${index} not found in block`);
|
|
667
|
+
}
|
|
668
|
+
const blob = blobs[index];
|
|
669
|
+
const kzgProof = await kzg.asyncComputeBlobKzgProof(blob, kzgCommitment);
|
|
670
|
+
const kzgCommitmentInclusionProof = computePreFuluKzgCommitmentsInclusionProof(
|
|
671
|
+
fork,
|
|
672
|
+
block.message.body,
|
|
673
|
+
index
|
|
674
|
+
);
|
|
675
|
+
return {index, blob, kzgCommitment, kzgProof, signedBlockHeader, kzgCommitmentInclusionProof};
|
|
676
|
+
})
|
|
677
|
+
);
|
|
678
|
+
} else {
|
|
679
|
+
data = [];
|
|
680
|
+
}
|
|
681
|
+
} else if (isForkPostDeneb(fork)) {
|
|
682
|
+
let {blobSidecars} = (await db.blobSidecars.get(blockRoot)) ?? {};
|
|
683
|
+
if (!blobSidecars) {
|
|
684
|
+
({blobSidecars} = (await db.blobSidecarsArchive.get(block.message.slot)) ?? {});
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
if (!blobSidecars) {
|
|
688
|
+
throw new ApiError(
|
|
689
|
+
404,
|
|
690
|
+
`blobSidecars not found in db for slot=${block.message.slot} root=${toRootHex(blockRoot)}`
|
|
691
|
+
);
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
data = indices ? blobSidecars.filter(({index}) => indices.includes(index)) : blobSidecars;
|
|
695
|
+
} else {
|
|
696
|
+
data = [];
|
|
627
697
|
}
|
|
628
698
|
|
|
629
699
|
return {
|
|
630
|
-
data
|
|
700
|
+
data,
|
|
631
701
|
meta: {
|
|
632
702
|
executionOptimistic,
|
|
633
703
|
finalized,
|
|
@@ -648,7 +718,8 @@ export function getBeaconBlockApi({
|
|
|
648
718
|
if (isForkPostFulu(fork)) {
|
|
649
719
|
const {targetCustodyGroupCount} = chain.custodyConfig;
|
|
650
720
|
if (targetCustodyGroupCount < NUMBER_OF_COLUMNS / 2) {
|
|
651
|
-
throw
|
|
721
|
+
throw new ApiError(
|
|
722
|
+
503,
|
|
652
723
|
`Custody group count of ${targetCustodyGroupCount} is not sufficient to serve blobs, must custody at least ${NUMBER_OF_COLUMNS / 2} data columns`
|
|
653
724
|
);
|
|
654
725
|
}
|
|
@@ -65,10 +65,10 @@ export const specConstants = {
|
|
|
65
65
|
JUSTIFICATION_BITS_LENGTH,
|
|
66
66
|
ENDIANNESS: "little",
|
|
67
67
|
// ## Withdrawal prefixes
|
|
68
|
-
BLS_WITHDRAWAL_PREFIX,
|
|
69
|
-
ETH1_ADDRESS_WITHDRAWAL_PREFIX,
|
|
70
|
-
COMPOUNDING_WITHDRAWAL_PREFIX,
|
|
71
|
-
BUILDER_WITHDRAWAL_PREFIX,
|
|
68
|
+
BLS_WITHDRAWAL_PREFIX: toHexByte(BLS_WITHDRAWAL_PREFIX),
|
|
69
|
+
ETH1_ADDRESS_WITHDRAWAL_PREFIX: toHexByte(ETH1_ADDRESS_WITHDRAWAL_PREFIX),
|
|
70
|
+
COMPOUNDING_WITHDRAWAL_PREFIX: toHexByte(COMPOUNDING_WITHDRAWAL_PREFIX),
|
|
71
|
+
BUILDER_WITHDRAWAL_PREFIX: toHexByte(BUILDER_WITHDRAWAL_PREFIX),
|
|
72
72
|
// ## Domain types
|
|
73
73
|
DOMAIN_BEACON_PROPOSER,
|
|
74
74
|
DOMAIN_BEACON_ATTESTER,
|
|
@@ -113,15 +113,23 @@ export const specConstants = {
|
|
|
113
113
|
DOMAIN_BLS_TO_EXECUTION_CHANGE,
|
|
114
114
|
|
|
115
115
|
// Deneb types
|
|
116
|
-
BLOB_TX_TYPE,
|
|
117
|
-
VERSIONED_HASH_VERSION_KZG,
|
|
116
|
+
BLOB_TX_TYPE: toHexByte(BLOB_TX_TYPE),
|
|
117
|
+
VERSIONED_HASH_VERSION_KZG: toHexByte(VERSIONED_HASH_VERSION_KZG),
|
|
118
118
|
|
|
119
119
|
// electra
|
|
120
120
|
UNSET_DEPOSIT_REQUESTS_START_INDEX,
|
|
121
121
|
FULL_EXIT_REQUEST_AMOUNT,
|
|
122
|
-
DEPOSIT_REQUEST_TYPE,
|
|
123
|
-
WITHDRAWAL_REQUEST_TYPE,
|
|
124
|
-
CONSOLIDATION_REQUEST_TYPE,
|
|
122
|
+
DEPOSIT_REQUEST_TYPE: toHexByte(DEPOSIT_REQUEST_TYPE),
|
|
123
|
+
WITHDRAWAL_REQUEST_TYPE: toHexByte(WITHDRAWAL_REQUEST_TYPE),
|
|
124
|
+
CONSOLIDATION_REQUEST_TYPE: toHexByte(CONSOLIDATION_REQUEST_TYPE),
|
|
125
125
|
BUILDER_PAYMENT_THRESHOLD_NUMERATOR,
|
|
126
126
|
BUILDER_PAYMENT_THRESHOLD_DENOMINATOR,
|
|
127
127
|
};
|
|
128
|
+
|
|
129
|
+
/** Convert single-byte numbers to hex strings for API spec compliance */
|
|
130
|
+
function toHexByte(n: number): string {
|
|
131
|
+
if (n < 0 || n > 255 || !Number.isInteger(n)) {
|
|
132
|
+
throw new Error("toHexByte expected a single-byte integer, but received " + n);
|
|
133
|
+
}
|
|
134
|
+
return "0x" + n.toString(16).padStart(2, "0");
|
|
135
|
+
}
|
|
@@ -5,6 +5,7 @@ import {ExecutionStatus} from "@lodestar/fork-choice";
|
|
|
5
5
|
import {
|
|
6
6
|
ForkName,
|
|
7
7
|
ForkPostBellatrix,
|
|
8
|
+
ForkPreGloas,
|
|
8
9
|
ForkSeq,
|
|
9
10
|
GENESIS_SLOT,
|
|
10
11
|
SLOTS_PER_EPOCH,
|
|
@@ -410,11 +411,9 @@ export function getValidatorApi(
|
|
|
410
411
|
{
|
|
411
412
|
commonBlockBodyPromise,
|
|
412
413
|
parentBlockRoot,
|
|
413
|
-
parentSlot,
|
|
414
414
|
}: Omit<routes.validator.ExtraProduceBlockOpts, "builderSelection"> & {
|
|
415
415
|
commonBlockBodyPromise: Promise<CommonBlockBody>;
|
|
416
416
|
parentBlockRoot: Root;
|
|
417
|
-
parentSlot: Slot;
|
|
418
417
|
}
|
|
419
418
|
): Promise<ProduceBlindedBlockRes> {
|
|
420
419
|
const version = config.getForkName(slot);
|
|
@@ -446,7 +445,6 @@ export function getValidatorApi(
|
|
|
446
445
|
const {block, executionPayloadValue, consensusBlockValue} = await chain.produceBlindedBlock({
|
|
447
446
|
slot,
|
|
448
447
|
parentBlockRoot,
|
|
449
|
-
parentSlot,
|
|
450
448
|
randaoReveal,
|
|
451
449
|
graffiti,
|
|
452
450
|
commonBlockBodyPromise,
|
|
@@ -482,11 +480,9 @@ export function getValidatorApi(
|
|
|
482
480
|
strictFeeRecipientCheck,
|
|
483
481
|
commonBlockBodyPromise,
|
|
484
482
|
parentBlockRoot,
|
|
485
|
-
parentSlot,
|
|
486
483
|
}: Omit<routes.validator.ExtraProduceBlockOpts, "builderSelection"> & {
|
|
487
484
|
commonBlockBodyPromise: Promise<CommonBlockBody>;
|
|
488
485
|
parentBlockRoot: Root;
|
|
489
|
-
parentSlot: Slot;
|
|
490
486
|
}
|
|
491
487
|
): Promise<ProduceBlockContentsRes & {shouldOverrideBuilder?: boolean}> {
|
|
492
488
|
const source = ProducedBlockSource.engine;
|
|
@@ -498,7 +494,6 @@ export function getValidatorApi(
|
|
|
498
494
|
const {block, executionPayloadValue, consensusBlockValue, shouldOverrideBuilder} = await chain.produceBlock({
|
|
499
495
|
slot,
|
|
500
496
|
parentBlockRoot,
|
|
501
|
-
parentSlot,
|
|
502
497
|
randaoReveal,
|
|
503
498
|
graffiti,
|
|
504
499
|
feeRecipient,
|
|
@@ -641,7 +636,6 @@ export function getValidatorApi(
|
|
|
641
636
|
strictFeeRecipientCheck: false,
|
|
642
637
|
commonBlockBodyPromise,
|
|
643
638
|
parentBlockRoot,
|
|
644
|
-
parentSlot,
|
|
645
639
|
})
|
|
646
640
|
: Promise.reject(new Error("Builder disabled"));
|
|
647
641
|
|
|
@@ -651,7 +645,6 @@ export function getValidatorApi(
|
|
|
651
645
|
strictFeeRecipientCheck,
|
|
652
646
|
commonBlockBodyPromise,
|
|
653
647
|
parentBlockRoot,
|
|
654
|
-
parentSlot,
|
|
655
648
|
}).then((engineBlock) => {
|
|
656
649
|
// Once the engine returns a block, in the event of either:
|
|
657
650
|
// - suspected builder censorship
|
|
@@ -694,7 +687,6 @@ export function getValidatorApi(
|
|
|
694
687
|
.produceCommonBlockBody({
|
|
695
688
|
slot,
|
|
696
689
|
parentBlockRoot,
|
|
697
|
-
parentSlot,
|
|
698
690
|
randaoReveal,
|
|
699
691
|
graffiti: graffitiBytes,
|
|
700
692
|
})
|
|
@@ -887,13 +879,14 @@ export function getValidatorApi(
|
|
|
887
879
|
opts
|
|
888
880
|
);
|
|
889
881
|
|
|
890
|
-
|
|
882
|
+
const fork = ForkSeq[meta.version];
|
|
883
|
+
if (opts.blindedLocal === true && fork >= ForkSeq.bellatrix && fork < ForkSeq.gloas) {
|
|
891
884
|
if (meta.executionPayloadBlinded) {
|
|
892
885
|
return {data, meta};
|
|
893
886
|
}
|
|
894
887
|
|
|
895
888
|
const {block} = data as BlockContents;
|
|
896
|
-
const blindedBlock = beaconBlockToBlinded(config, block as BeaconBlock<ForkPostBellatrix>);
|
|
889
|
+
const blindedBlock = beaconBlockToBlinded(config, block as BeaconBlock<ForkPostBellatrix & ForkPreGloas>);
|
|
897
890
|
return {
|
|
898
891
|
data: blindedBlock,
|
|
899
892
|
meta: {...meta, executionPayloadBlinded: true},
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {ForkName, ForkPreDeneb} from "@lodestar/params";
|
|
2
|
-
import {BlobIndex, ColumnIndex, SignedBeaconBlock, Slot, deneb, fulu} from "@lodestar/types";
|
|
1
|
+
import {ForkName, ForkPostFulu, ForkPreDeneb, ForkPreGloas} from "@lodestar/params";
|
|
2
|
+
import {BeaconBlockBody, BlobIndex, ColumnIndex, SignedBeaconBlock, Slot, deneb, fulu} from "@lodestar/types";
|
|
3
3
|
import {fromHex, prettyBytes, toRootHex, withTimeout} from "@lodestar/utils";
|
|
4
4
|
import {VersionedHashes} from "../../../execution/index.js";
|
|
5
5
|
import {kzgCommitmentToVersionedHash} from "../../../util/blobs.js";
|
|
@@ -715,7 +715,9 @@ export class BlockInputColumns extends AbstractBlockInput<ForkColumnsDA, fulu.Da
|
|
|
715
715
|
);
|
|
716
716
|
}
|
|
717
717
|
|
|
718
|
-
const hasAllData =
|
|
718
|
+
const hasAllData =
|
|
719
|
+
(props.block.message.body as BeaconBlockBody<ForkPostFulu & ForkPreGloas>).blobKzgCommitments.length === 0 ||
|
|
720
|
+
this.state.hasAllData;
|
|
719
721
|
|
|
720
722
|
this.state = {
|
|
721
723
|
...this.state,
|
package/src/chain/chain.ts
CHANGED
|
@@ -719,7 +719,6 @@ export class BeaconChain implements IBeaconChain {
|
|
|
719
719
|
feeRecipient,
|
|
720
720
|
commonBlockBodyPromise,
|
|
721
721
|
parentBlockRoot,
|
|
722
|
-
parentSlot,
|
|
723
722
|
}: BlockAttributes & {commonBlockBodyPromise: Promise<CommonBlockBody>}
|
|
724
723
|
): Promise<{
|
|
725
724
|
block: AssembledBlockType<T>;
|
|
@@ -745,7 +744,6 @@ export class BeaconChain implements IBeaconChain {
|
|
|
745
744
|
graffiti,
|
|
746
745
|
slot,
|
|
747
746
|
feeRecipient,
|
|
748
|
-
parentSlot,
|
|
749
747
|
parentBlockRoot,
|
|
750
748
|
proposerIndex,
|
|
751
749
|
proposerPubKey,
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
ForkName,
|
|
12
12
|
ForkPostAltair,
|
|
13
13
|
ForkPostBellatrix,
|
|
14
|
+
ForkPreGloas,
|
|
14
15
|
ForkSeq,
|
|
15
16
|
MIN_SYNC_COMMITTEE_PARTICIPANTS,
|
|
16
17
|
SYNC_COMMITTEE_SIZE,
|
|
@@ -741,17 +742,24 @@ export function sumBits(bits: BitArray): number {
|
|
|
741
742
|
return bits.getTrueBitIndexes().length;
|
|
742
743
|
}
|
|
743
744
|
|
|
744
|
-
|
|
745
|
+
// TODO GLOAS: Pending light-client spec but this function probably won't be used
|
|
746
|
+
// in Gloas. So we can assume any types here are pre-gloas
|
|
747
|
+
export function blockToLightClientHeader(
|
|
748
|
+
fork: ForkName,
|
|
749
|
+
block: BeaconBlock<ForkPostAltair & ForkPreGloas>
|
|
750
|
+
): LightClientHeader {
|
|
745
751
|
const blockSlot = block.slot;
|
|
746
752
|
const beacon: phase0.BeaconBlockHeader = {
|
|
747
753
|
slot: blockSlot,
|
|
748
754
|
proposerIndex: block.proposerIndex,
|
|
749
755
|
parentRoot: block.parentRoot,
|
|
750
756
|
stateRoot: block.stateRoot,
|
|
751
|
-
bodyRoot: (ssz[fork].BeaconBlockBody as SSZTypesFor<ForkPostAltair, "BeaconBlockBody">).hashTreeRoot(
|
|
757
|
+
bodyRoot: (ssz[fork].BeaconBlockBody as SSZTypesFor<ForkPostAltair & ForkPreGloas, "BeaconBlockBody">).hashTreeRoot(
|
|
758
|
+
block.body
|
|
759
|
+
),
|
|
752
760
|
};
|
|
753
761
|
if (ForkSeq[fork] >= ForkSeq.capella) {
|
|
754
|
-
const blockBody = block.body as BeaconBlockBody<ForkPostBellatrix>;
|
|
762
|
+
const blockBody = block.body as BeaconBlockBody<ForkPostBellatrix & ForkPreGloas>;
|
|
755
763
|
const execution = executionPayloadToPayloadHeader(ForkSeq[fork], blockBody.executionPayload);
|
|
756
764
|
return {
|
|
757
765
|
beacon,
|
|
@@ -4,9 +4,11 @@ import {
|
|
|
4
4
|
ForkPostBellatrix,
|
|
5
5
|
ForkPostDeneb,
|
|
6
6
|
ForkPostFulu,
|
|
7
|
+
ForkPreGloas,
|
|
7
8
|
ForkSeq,
|
|
8
9
|
isForkPostAltair,
|
|
9
10
|
isForkPostBellatrix,
|
|
11
|
+
isForkPostGloas,
|
|
10
12
|
} from "@lodestar/params";
|
|
11
13
|
import {
|
|
12
14
|
CachedBeaconStateAllForks,
|
|
@@ -90,7 +92,6 @@ export type BlockAttributes = {
|
|
|
90
92
|
graffiti: Bytes32;
|
|
91
93
|
slot: Slot;
|
|
92
94
|
parentBlockRoot: Root;
|
|
93
|
-
parentSlot: Slot;
|
|
94
95
|
feeRecipient?: string;
|
|
95
96
|
};
|
|
96
97
|
|
|
@@ -182,7 +183,14 @@ export async function produceBlockBody<T extends BlockType>(
|
|
|
182
183
|
};
|
|
183
184
|
this.logger.verbose("Producing beacon block body", logMeta);
|
|
184
185
|
|
|
185
|
-
if (
|
|
186
|
+
if (isForkPostGloas(fork)) {
|
|
187
|
+
// TODO GLOAS: Set body.signedExecutionPayloadBid and body.payloadAttestation
|
|
188
|
+
const commonBlockBody = await commonBlockBodyPromise;
|
|
189
|
+
blockBody = Object.assign({}, commonBlockBody) as AssembledBodyType<T>;
|
|
190
|
+
executionPayloadValue = BigInt(0);
|
|
191
|
+
|
|
192
|
+
// We don't deal with blinded blocks, execution engine, blobs and execution requests post-gloas
|
|
193
|
+
} else if (isForkPostBellatrix(fork)) {
|
|
186
194
|
const safeBlockHash = this.forkChoice.getJustifiedBlock().executionPayloadBlockHash ?? ZERO_HASH_HEX;
|
|
187
195
|
const finalizedBlockHash = this.forkChoice.getFinalizedBlock().executionPayloadBlockHash ?? ZERO_HASH_HEX;
|
|
188
196
|
const feeRecipient = requestedFeeRecipient ?? this.beaconProposerCache.getOrDefault(proposerIndex);
|
|
@@ -307,6 +315,7 @@ export async function produceBlockBody<T extends BlockType>(
|
|
|
307
315
|
|
|
308
316
|
// blockType === BlockType.Full
|
|
309
317
|
else {
|
|
318
|
+
// enginePromise only supports pre-gloas
|
|
310
319
|
const enginePromise = (async () => {
|
|
311
320
|
const endExecutionPayload = this.metrics?.executionBlockProductionTimeSteps.startTimer();
|
|
312
321
|
|
|
@@ -384,13 +393,13 @@ export async function produceBlockBody<T extends BlockType>(
|
|
|
384
393
|
blockBody = Object.assign({}, commonBlockBody) as AssembledBodyType<BlockType.Blinded>;
|
|
385
394
|
|
|
386
395
|
if (engineRes.isPremerge) {
|
|
387
|
-
(blockBody as BeaconBlockBody<ForkPostBellatrix>).executionPayload = engineRes.executionPayload;
|
|
396
|
+
(blockBody as BeaconBlockBody<ForkPostBellatrix & ForkPreGloas>).executionPayload = engineRes.executionPayload;
|
|
388
397
|
executionPayloadValue = engineRes.executionPayloadValue;
|
|
389
398
|
} else {
|
|
390
399
|
const {prepType, payloadId, executionPayload, blobsBundle, executionRequests} = engineRes;
|
|
391
400
|
shouldOverrideBuilder = engineRes.shouldOverrideBuilder;
|
|
392
401
|
|
|
393
|
-
(blockBody as BeaconBlockBody<ForkPostBellatrix>).executionPayload = executionPayload;
|
|
402
|
+
(blockBody as BeaconBlockBody<ForkPostBellatrix & ForkPreGloas>).executionPayload = executionPayload;
|
|
394
403
|
(produceResult as ProduceFullBellatrix).executionPayload = executionPayload;
|
|
395
404
|
executionPayloadValue = engineRes.executionPayloadValue;
|
|
396
405
|
Object.assign(logMeta, {transactions: executionPayload.transactions.length, shouldOverrideBuilder});
|
|
@@ -723,15 +732,7 @@ export async function produceCommonBlockBody<T extends BlockType>(
|
|
|
723
732
|
this: BeaconChain,
|
|
724
733
|
blockType: T,
|
|
725
734
|
currentState: CachedBeaconStateAllForks,
|
|
726
|
-
{
|
|
727
|
-
randaoReveal,
|
|
728
|
-
graffiti,
|
|
729
|
-
slot,
|
|
730
|
-
parentSlot,
|
|
731
|
-
parentBlockRoot,
|
|
732
|
-
}: BlockAttributes & {
|
|
733
|
-
parentSlot: Slot;
|
|
734
|
-
}
|
|
735
|
+
{randaoReveal, graffiti, slot, parentBlockRoot}: BlockAttributes
|
|
735
736
|
): Promise<CommonBlockBody> {
|
|
736
737
|
const stepsMetrics =
|
|
737
738
|
blockType === BlockType.Full
|
|
@@ -783,7 +784,8 @@ export async function produceCommonBlockBody<T extends BlockType>(
|
|
|
783
784
|
|
|
784
785
|
const endSyncAggregate = stepsMetrics?.startTimer();
|
|
785
786
|
if (ForkSeq[fork] >= ForkSeq.altair) {
|
|
786
|
-
const
|
|
787
|
+
const previousSlot = slot - 1;
|
|
788
|
+
const syncAggregate = this.syncContributionAndProofPool.getAggregate(previousSlot, parentBlockRoot);
|
|
787
789
|
this.metrics?.production.producedSyncAggregateParticipants.observe(
|
|
788
790
|
syncAggregate.syncCommitteeBits.getTrueBitIndexes().length
|
|
789
791
|
);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {ChainForkConfig} from "@lodestar/config";
|
|
2
2
|
import {CheckpointWithHex} from "@lodestar/fork-choice";
|
|
3
|
-
import {ForkName, ForkPostFulu, isForkPostDeneb, isForkPostFulu} from "@lodestar/params";
|
|
3
|
+
import {ForkName, ForkPostFulu, ForkPreGloas, isForkPostDeneb, isForkPostFulu, isForkPostGloas} from "@lodestar/params";
|
|
4
4
|
import {computeStartSlotAtEpoch} from "@lodestar/state-transition";
|
|
5
5
|
import {RootHex, SignedBeaconBlock, Slot, deneb, fulu} from "@lodestar/types";
|
|
6
6
|
import {LodestarError, Logger} from "@lodestar/utils";
|
|
@@ -155,6 +155,12 @@ export class SeenBlockInput {
|
|
|
155
155
|
let blockInput = this.blockInputs.get(blockRootHex) as IBlockInput;
|
|
156
156
|
if (!blockInput) {
|
|
157
157
|
const {forkName, daOutOfRange} = this.buildCommonProps(block.message.slot);
|
|
158
|
+
|
|
159
|
+
// TODO GLOAS: Implement
|
|
160
|
+
if (isForkPostGloas(forkName)) {
|
|
161
|
+
throw Error("Not implemented");
|
|
162
|
+
}
|
|
163
|
+
// Pre-deneb
|
|
158
164
|
if (!isForkPostDeneb(forkName)) {
|
|
159
165
|
blockInput = BlockInputPreData.createFromBlock({
|
|
160
166
|
block,
|
|
@@ -165,9 +171,10 @@ export class SeenBlockInput {
|
|
|
165
171
|
seenTimestampSec,
|
|
166
172
|
peerIdStr,
|
|
167
173
|
});
|
|
174
|
+
// Fulu Only
|
|
168
175
|
} else if (isForkPostFulu(forkName)) {
|
|
169
176
|
blockInput = BlockInputColumns.createFromBlock({
|
|
170
|
-
block: block as SignedBeaconBlock<ForkPostFulu>,
|
|
177
|
+
block: block as SignedBeaconBlock<ForkPostFulu & ForkPreGloas>,
|
|
171
178
|
blockRootHex,
|
|
172
179
|
daOutOfRange,
|
|
173
180
|
forkName,
|
|
@@ -177,6 +184,7 @@ export class SeenBlockInput {
|
|
|
177
184
|
seenTimestampSec,
|
|
178
185
|
peerIdStr,
|
|
179
186
|
});
|
|
187
|
+
// Deneb and Electra
|
|
180
188
|
} else {
|
|
181
189
|
blockInput = BlockInputBlobs.createFromBlock({
|
|
182
190
|
block: block as SignedBeaconBlock<ForkBlobsDA>,
|
|
@@ -245,8 +245,8 @@ export function getCoreTopicsAtFork(
|
|
|
245
245
|
topics.push(...getDataColumnSidecarTopics(networkConfig));
|
|
246
246
|
}
|
|
247
247
|
|
|
248
|
-
// After Deneb also track blob_sidecar_{subnet_id}
|
|
249
|
-
if (ForkSeq[fork] >= ForkSeq.deneb) {
|
|
248
|
+
// After Deneb and before Fulu also track blob_sidecar_{subnet_id}
|
|
249
|
+
if (ForkSeq[fork] >= ForkSeq.deneb && ForkSeq[fork] < ForkSeq.fulu) {
|
|
250
250
|
const {config} = networkConfig;
|
|
251
251
|
const subnetCount = isForkPostElectra(fork)
|
|
252
252
|
? config.BLOB_SIDECAR_SUBNET_COUNT_ELECTRA
|