@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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {AbortOptions} from "@libp2p/interface";
|
|
2
2
|
import {BaseDatastore} from "datastore-core";
|
|
3
|
-
import {FsDatastore} from "datastore-fs";
|
|
4
3
|
import {Key, KeyQuery, Pair, Query} from "interface-datastore";
|
|
4
|
+
import {LevelDatastore} from "#datastore-wrapper";
|
|
5
5
|
|
|
6
6
|
type MemoryItem = {
|
|
7
7
|
lastAccessedMs: number;
|
|
@@ -22,7 +22,7 @@ type MemoryItem = {
|
|
|
22
22
|
* - Update lastAccessedMs
|
|
23
23
|
*/
|
|
24
24
|
export class Eth2PeerDataStore extends BaseDatastore {
|
|
25
|
-
private _dbDatastore:
|
|
25
|
+
private _dbDatastore: LevelDatastore;
|
|
26
26
|
private _memoryDatastore: Map<string, MemoryItem>;
|
|
27
27
|
/** Same to PersistentPeerStore of the old libp2p implementation */
|
|
28
28
|
private _dirtyItems = new Set<string>();
|
|
@@ -32,7 +32,7 @@ export class Eth2PeerDataStore extends BaseDatastore {
|
|
|
32
32
|
private _maxMemoryItems: number;
|
|
33
33
|
|
|
34
34
|
constructor(
|
|
35
|
-
dbDatastore:
|
|
35
|
+
dbDatastore: LevelDatastore | string,
|
|
36
36
|
{threshold = 5, maxMemoryItems = 50}: {threshold?: number | undefined; maxMemoryItems?: number | undefined} = {}
|
|
37
37
|
) {
|
|
38
38
|
super();
|
|
@@ -44,7 +44,7 @@ export class Eth2PeerDataStore extends BaseDatastore {
|
|
|
44
44
|
throw Error(`Threshold ${threshold} should be at most maxMemoryItems ${maxMemoryItems}`);
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
this._dbDatastore = typeof dbDatastore === "string" ? new
|
|
47
|
+
this._dbDatastore = typeof dbDatastore === "string" ? new LevelDatastore(dbDatastore) : dbDatastore;
|
|
48
48
|
this._memoryDatastore = new Map();
|
|
49
49
|
this._threshold = threshold;
|
|
50
50
|
this._maxMemoryItems = maxMemoryItems;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {ChainForkConfig} from "@lodestar/config";
|
|
2
|
-
import {ForkPostDeneb, ForkPostFulu} from "@lodestar/params";
|
|
2
|
+
import {ForkPostDeneb, ForkPostFulu, ForkPreFulu, ForkPreGloas} from "@lodestar/params";
|
|
3
3
|
import {SignedBeaconBlock, Slot, deneb, fulu, phase0} from "@lodestar/types";
|
|
4
4
|
import {LodestarError, Logger, fromHex, prettyBytes, prettyPrintIndices, toRootHex} from "@lodestar/utils";
|
|
5
5
|
import {
|
|
@@ -458,14 +458,16 @@ export function validateBlockByRangeResponse(
|
|
|
458
458
|
}
|
|
459
459
|
|
|
460
460
|
/**
|
|
461
|
-
* Should not be called directly. Only exported for unit testing purposes
|
|
461
|
+
* Should not be called directly. Only exported for unit testing purposes.
|
|
462
|
+
* This is used only in Deneb and Electra
|
|
462
463
|
*/
|
|
463
464
|
export async function validateBlobsByRangeResponse(
|
|
464
465
|
dataRequestBlocks: ValidatedBlock[],
|
|
465
466
|
blobSidecars: deneb.BlobSidecars
|
|
466
467
|
): Promise<ValidatedBlobSidecars[]> {
|
|
467
468
|
const expectedBlobCount = dataRequestBlocks.reduce(
|
|
468
|
-
(acc, {block}) =>
|
|
469
|
+
(acc, {block}) =>
|
|
470
|
+
(block as SignedBeaconBlock<ForkPostDeneb & ForkPreFulu>).message.body.blobKzgCommitments.length + acc,
|
|
469
471
|
0
|
|
470
472
|
);
|
|
471
473
|
if (blobSidecars.length > expectedBlobCount) {
|
|
@@ -492,7 +494,8 @@ export async function validateBlobsByRangeResponse(
|
|
|
492
494
|
const validateSidecarsPromises: Promise<ValidatedBlobSidecars>[] = [];
|
|
493
495
|
for (let blockIndex = 0, blobSidecarIndex = 0; blockIndex < dataRequestBlocks.length; blockIndex++) {
|
|
494
496
|
const {block, blockRoot} = dataRequestBlocks[blockIndex];
|
|
495
|
-
const blockKzgCommitments = (block as SignedBeaconBlock<ForkPostDeneb>).message.body
|
|
497
|
+
const blockKzgCommitments = (block as SignedBeaconBlock<ForkPostDeneb & ForkPreFulu>).message.body
|
|
498
|
+
.blobKzgCommitments;
|
|
496
499
|
if (blockKzgCommitments.length === 0) {
|
|
497
500
|
continue;
|
|
498
501
|
}
|
|
@@ -532,8 +535,9 @@ export async function validateColumnsByRangeResponse(
|
|
|
532
535
|
columnSidecars: fulu.DataColumnSidecars
|
|
533
536
|
): Promise<WarnResult<ValidatedColumnSidecars[], DownloadByRangeError>> {
|
|
534
537
|
// Expected column count considering currently-validated batch blocks
|
|
538
|
+
// TODO GLOAS: Post-gloas's blobKzgCommitments is not in beacon block body. Need to source it from somewhere else.
|
|
535
539
|
const expectedColumnCount = dataRequestBlocks.reduce((acc, {block}) => {
|
|
536
|
-
return (block as SignedBeaconBlock<ForkPostDeneb>).message.body.blobKzgCommitments.length > 0
|
|
540
|
+
return (block as SignedBeaconBlock<ForkPostDeneb & ForkPreGloas>).message.body.blobKzgCommitments.length > 0
|
|
537
541
|
? request.columns.length + acc
|
|
538
542
|
: acc;
|
|
539
543
|
}, 0);
|
|
@@ -566,7 +570,9 @@ export async function validateColumnsByRangeResponse(
|
|
|
566
570
|
const {block, blockRoot} = dataRequestBlocks[blockIndex];
|
|
567
571
|
const slot = block.message.slot;
|
|
568
572
|
const blockRootHex = toRootHex(blockRoot);
|
|
569
|
-
|
|
573
|
+
// TODO GLOAS: Post-gloas's blobKzgCommitments is not in beacon block body. Need to source it from somewhere else.
|
|
574
|
+
const blockKzgCommitments = (block as SignedBeaconBlock<ForkPostFulu & ForkPreGloas>).message.body
|
|
575
|
+
.blobKzgCommitments;
|
|
570
576
|
const expectedColumns = blockKzgCommitments.length ? request.columns.length : 0;
|
|
571
577
|
|
|
572
578
|
if (expectedColumns === 0) {
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
import {routes} from "@lodestar/api";
|
|
2
2
|
import {ChainForkConfig} from "@lodestar/config";
|
|
3
|
-
import {
|
|
4
|
-
|
|
3
|
+
import {
|
|
4
|
+
ForkPostDeneb,
|
|
5
|
+
ForkPostFulu,
|
|
6
|
+
ForkPreFulu,
|
|
7
|
+
ForkPreGloas,
|
|
8
|
+
isForkPostDeneb,
|
|
9
|
+
isForkPostFulu,
|
|
10
|
+
} from "@lodestar/params";
|
|
11
|
+
import {BeaconBlockBody, BlobIndex, ColumnIndex, SignedBeaconBlock, Slot, deneb, fulu} from "@lodestar/types";
|
|
5
12
|
import {LodestarError, fromHex, prettyBytes, prettyPrintIndices, toHex, toRootHex} from "@lodestar/utils";
|
|
6
13
|
import {isBlockInputBlobs, isBlockInputColumns} from "../../chain/blocks/blockInput/blockInput.js";
|
|
7
14
|
import {BlockInputSource, IBlockInput} from "../../chain/blocks/blockInput/types.js";
|
|
@@ -269,7 +276,7 @@ export async function fetchByRoot({
|
|
|
269
276
|
missing: network.custodyConfig.sampledColumns,
|
|
270
277
|
});
|
|
271
278
|
} else if (isForkPostDeneb(forkName)) {
|
|
272
|
-
const commitments = (block as SignedBeaconBlock<ForkPostDeneb>).message.body.blobKzgCommitments;
|
|
279
|
+
const commitments = (block as SignedBeaconBlock<ForkPostDeneb & ForkPreFulu>).message.body.blobKzgCommitments;
|
|
273
280
|
const blobCount = commitments.length;
|
|
274
281
|
blobSidecars = await fetchAndValidateBlobs({
|
|
275
282
|
config,
|
|
@@ -369,7 +376,8 @@ export async function fetchAndValidateColumns({
|
|
|
369
376
|
}: FetchByRootAndValidateColumnsProps): Promise<WarnResult<fulu.DataColumnSidecars, DownloadByRootError>> {
|
|
370
377
|
const {peerId: peerIdStr} = peerMeta;
|
|
371
378
|
const slot = block.message.slot;
|
|
372
|
-
|
|
379
|
+
// TODO GLOAS: Get blob count from somewhere else since blobKzgCommitments is absent from block body
|
|
380
|
+
const blobCount = (block.message.body as BeaconBlockBody<ForkPostFulu & ForkPreGloas>).blobKzgCommitments.length;
|
|
373
381
|
if (blobCount === 0) {
|
|
374
382
|
return {result: [], warnings: null};
|
|
375
383
|
}
|
package/src/util/dataColumns.ts
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
import {digest} from "@chainsafe/as-sha256";
|
|
2
2
|
import {Tree} from "@chainsafe/persistent-merkle-tree";
|
|
3
3
|
import {ChainForkConfig} from "@lodestar/config";
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
ForkAll,
|
|
6
|
+
ForkName,
|
|
7
|
+
ForkPostFulu,
|
|
8
|
+
ForkPreGloas,
|
|
9
|
+
KZG_COMMITMENTS_GINDEX,
|
|
10
|
+
NUMBER_OF_COLUMNS,
|
|
11
|
+
} from "@lodestar/params";
|
|
5
12
|
import {signedBlockToSignedHeader} from "@lodestar/state-transition";
|
|
6
13
|
import {
|
|
7
14
|
BeaconBlockBody,
|
|
@@ -303,7 +310,9 @@ export function getDataColumnSidecarsFromBlock(
|
|
|
303
310
|
signedBlock: SignedBeaconBlock<ForkPostFulu>,
|
|
304
311
|
cellsAndKzgProofs: {cells: Uint8Array[]; proofs: Uint8Array[]}[]
|
|
305
312
|
): fulu.DataColumnSidecars {
|
|
306
|
-
|
|
313
|
+
// TODO GLOAS: Need to get blobKzgCommitments from somewhere else
|
|
314
|
+
const blobKzgCommitments = (signedBlock.message.body as BeaconBlockBody<ForkPostFulu & ForkPreGloas>)
|
|
315
|
+
.blobKzgCommitments;
|
|
307
316
|
|
|
308
317
|
// No need to create data column sidecars if there are no blobs
|
|
309
318
|
if (blobKzgCommitments.length === 0) {
|